1

我正在使用 Tomcat 8 在 Window 10 中运行应用程序(作为窗口服务运行)。

我想通过以下两种方法中的任何一种来确认如何避免 STDOUT 或 STDERR 日志文件太大:

当大小达到 20MB 时创建新的 STDOUT 或 STDERR 日志?有什么方法可以实现上述任何方法吗?

4

1 回答 1

1

简短的回答:你不能

虽然理论上Procrun(将 Tomcat 作为 Window 服务启动的可执行文件)可以定期将标准输出和错误流重定向到新文件(使用类似这个问题的技术),但实际上它不会:标准流的重定向在启动期间只执行一次。

源代码中有一些提示表明 Procrun 中考虑了基于时间的旋转功能(参见github),但从未实现过。您可以向项目的 JIRA添加功能请求。

当今可用的最佳解决方案是不要将您的日志发送到stdout/stderr. 所有合适的日志框架都实现了某种轮换日志文件。

在 Tomcat 的情况下,您只需要:

  1. 通过将行 替换为以下内容来禁用文件ConsoleHandler中的logging.properties.handlers
    .handlers = 1catalina.org.apache.juli.AsyncFileHandler
    
    剩余的处理程序每​​天写入catalina.<date>.log并轮换。
  2. 通过设置将所有输出重定向到上面的System.out/System.err处理程序: swallowOutput="true"context.xml
    <Context swallowOutput="true">
        ...
    </Context>
    
  3. 如果您的应用程序使用与(例如 Log4j、Logback)不同的日志记录框架java.util.logging,请将日志记录系统配置为记录到文件而不是控制台。
于 2021-11-07T10:08:15.330 回答