如何在n天后删除Tomcat访问日志?

24
8个回答

16

默认情况下,rotatable 对于访问日志来说是开启的,因此每 24 小时会创建一个新文件。

Tomcat 本身不会对旧文件进行任何清理,一般在 Unix 系统上的原则是在系统上设置一个 cron 作业,将旧文件归档到备份目录和/或删除它们。


谢谢您的回答。您证实了我的假设,即文件需要通过cronjob(或Windows上的Visual Basic脚本)删除。 - Andreas
你如何移除旧的日志?我试过根据修改时间来删除,但在某些情况下,日志文件可能被其他进程/用户修改,因此没有及时删除... - Guillaume
虽然有点老,但如果有人在某个时候遇到这个问题,我会留下答案。https://dev59.com/Omox5IYBdhLWcg3wyXZx - OK999
1
这并不完全正确。Catalina支持maxDays参数。https://tomcat.apache.org/tomcat-7.0-doc/logging.html - Valerio Bozz
@ValerioBozz 对于访问日志不是正确的 - maxDays 不能在那里使用,因为它不使用 log4j 进行日志记录。 - gargii

6

对于Tomcat 7,您可以配置 tomcat/conf/logging.properties。例如:

1catalina.org.apache.juli.FileHandler.maxDays = 90

注意:1 不是打字错误。

https://tomcat.apache.org/tomcat-7.0-doc/logging.html

注意:这不会影响访问日志文件,这些文件由Access Log Valve处理,而不是主Tomcat(Apache Commons)日志处理。

1
这不会影响访问日志文件,这些文件由Access Log Valve处理,而不是主Tomcat(Apache Commons)日志记录。 - Steve Hart
谢谢@SteveHart,我已经根据您的有用提示更新了答案。 - Valerio Bozz

4

对于Windows系统,根据Erwan在Tomcat localhost_access_log文件清理中的回答,在给定的文件夹中并递归到所有子文件夹:

forfiles /p "C:\path\to\httplogs\" /s /m *.log /d -10 /c "cmd /c del @PATH"

测试的话,只需使用:

forfiles /p "C:\path\to\httplogs\" /s /m *.log /d -10 /c "cmd /c dir /b @PATH"

如果日志文件夹中有多个后缀,例如 .txt.log,请参考 使用批处理中的 FORFILES 删除一周之前的 tmp 和 bak 文件

for %%t in (.txt, .log) do forfiles /p "C:\path\to\httplogs\" /s /m *%%t /d -10 /c "cmd /c del @PATH"

3
您可以尝试创建logrotate配置文件:
#cat /etc/logrotate.d/tomcat
/var/log/tomcat/*.log {
        su tomcat tomcat
        copytruncate  
        daily  
        rotate 6  
        compress  
        missingok
}

"

su tomcat tomcat" - 我添加了这个命令以避免日志轮换出现权限错误。


1
如果您在Spring Boot中使用Tomcat,可以使用server.tomcat.accesslog.max-days=3删除旧文件,例如3天后。
记录访问日志的Spring Boot最小工作配置如下:
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=C:/path/to/dir
server.tomcat.accesslog.max-days=3

References:


1

1

0
在终端中运行:
locate RELEASE-NOTES | egrep 'tomcat|apache' | xargs grep "Apache Tomcat Version"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接