Tomcat 6 HTTP 日志滚动和清除

Ins*_*oup 5 http tomcat logging

我们在 Apache Tomcat 6 容器中运行我们的 Web 应用程序。我们的代码使用 SLF4J 和 Logback 并且滚动/清除就好了。Tomcat 日志(catalina、stdout 等)会在 Tomcat 服务重新启动时被删除。

问题是我们也在做一些 HTTP 日志记录。就任何人而言,它来自 Tomcat server.xml 文件中的这一行。

<Valve className="org.apache.catalina.valves.FastCommonAccessLogValve" directory="httplogs" pattern="combined" resolveHosts="false" prefix="" suffix=".log" rotatable="true" fileDateFormat="yyyy-MM-dd" />
Run Code Online (Sandbox Code Playgroud)

这似乎旋转得很好,但从不清除。有没有办法让 Tomcat 自动清除它,或者我是否必须修改重启脚本来清理 httplogs 目录?

Ben*_*enM 6

我建议使用 cron 作业 (UNIX) 或计划任务 (Windows) 清理日志文件。

首先确定您希望将日志保留多长时间,1 周、1 个月、3 个月?然后每天运行一个脚本来删除旧日志。在 Unix 上删除超过 90 天的日志文件:

find /path/to/httplogs/ -name "*.log" -type f -mtime +90 -exec rm -f {} \;
Run Code Online (Sandbox Code Playgroud)

在 Windows 上可以使用类似的命令(forfiles仅在某些版本上可用)

forfiles /p "C:\path\to\httplogs\" /s /m *.log /d -90 /c "cmd /c del @PATH"
Run Code Online (Sandbox Code Playgroud)

阅读这些命令的在线文档,并在将它们放入生产环境之前了解和测试它们正在做什么。

如果这些日志有一个共同的前缀,那么您可以将其添加到搜索掩码中以更具体地删除哪些文件。或者,我经常使用gzip旧文件而不是删除它们,以防它们以后证明有用。