【问题标题】:Tomcat not logging until file is "touched"Tomcat 不记录,直到文件被“触摸”
【发布时间】:2016-12-23 07:47:50
【问题描述】:

这里真的很奇怪:我们的 tomcat 访问日志文件在 Windows (Server 2012) Explorer 中显示 0 字节和一个过时的修改日期。它显然是空的,WinScp 同意并且没有复制它 - 大概是因为它显然没有改变或显然是空的。我们有点“知道”文件正在被修改。

但是,一旦我们在 Notepad++ 中打开日志文件,它就会“更新”,我们会在文件中看到 731KB 和数据,尽管时间戳仍然是旧的。即使我们只是 TYPE(即 cat)我们更新大小的文件。到底是什么原因?这只是一个资源管理器的问题吗?

【问题讨论】:

    标签: tomcat logging windows-explorer


    【解决方案1】:

    缓冲
    标志以确定是否将缓冲日志记录。如果设置为 false,则每次请求后都会写入访问日志。默认值:真

    因此,如果您想立即查看对该文件的更改,请将buffered = "false" 添加到您的访问日志阀的属性中。

    buffered 设置为true(默认值)时,仅当缓冲区达到其指定容量时,JVM 才会开始刷新内容,请注意,刷新并不能保证系统随后会写入立即将数据传输到物理设备,尽管这种情况经常发生;此外,日志文件几乎从未关闭,valve 只是不断刷新新内容。

    这可能解释了为什么修改后的日期是完整的。

    参考:http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html#Access_Log_Valve

    【讨论】:

    • 我看到(在 procmon 中)java.exe 进程 IS 在 9:14 写入文件。但是在资源管理器中修改的日期仍然是 8:59。
    • 你还没有听从我的建议吗?
    • 如果对我们有意义,我会这样做:a) 禁用缓冲是一个性能问题(这是一个 prod 环境),b) 文件 正在 定期写入。我们喜欢缓冲,它似乎正在工作(根据 procmon,文件是定期写入的)。
    • 那么你到底在担心什么?
    • 我们每隔几分钟使用 WinSCP (get -neweronly) 将日志复制到报告服务器。直到几天前它工作正常。现在它什么都不复制,因为它认为它正在复制的文件是旧的。基本上我们想要我们的日志。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2016-09-29
    • 1970-01-01
    • 1970-01-01
    • 2014-10-05
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多