How to delete Tomcat Access Log after n days?

2019-02-11 14:05发布

I only would like to keep the Access Logs of the last n days created by Tomcat Access Log Valve. http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html#Access%20Log%20Valve

But there seems to be no configuration-Attribute to define how long to keep the log-files? I guess this is because "Access Log Valve" only creates log files and doesn't delete them, is that correct?

5条回答
何必那么认真
2楼-- · 2019-02-11 14:23

for tomcat 7 you can config tomcat/conf/logging.properties

e.g:
1catalina.org.apache.juli.FileHandler.maxDays = 90

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

查看更多
Explosion°爆炸
3楼-- · 2019-02-11 14:25

By default rotatable is true for Access Log, so you will be having a new file created every 24 hours.

Tomcat itself does not do any housekeeping on the old files, the general principle on a Unix system is to have a cron job set up on the system to archive older files into a back up directory and/or delete them.

查看更多
在下西门庆
4楼-- · 2019-02-11 14:25

Incase of Apache Tomcat 7.0. You can use maxDays parameter to delete old log files. https://tomcat.apache.org/tomcat-7.0-doc/config/valve.html

查看更多
地球回转人心会变
5楼-- · 2019-02-11 14:29

You can try to create logrotate config:

#cat /etc/logrotate.d/tomcat
/var/log/tomcat/*.log {
        su tomcat tomcat
        copytruncate  
        daily  
        rotate 6  
        compress  
        missingok
}

"su tomcat tomcat" - i added for avoiding logrotate error on wrong permissions

查看更多
forever°为你锁心
6楼-- · 2019-02-11 14:38

For Windows, based on Erwan's answer in Tomcat localhost_access_log files cleanup, for the given folder and recursing into all subfolders:

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

To test, just use:

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

And when having multiple suffixes in the log folder, like both .txt and .log, see using FORFILES in batch to delete tmp and bak files older than a week:

for %%t in (.txt, .log) do forfiles /p "C:\path\to\httplogs\" /s /m *%%t /d -10 /c "cmd /c del @PATH"
查看更多
登录 后发表回答