开发者

How to delete Tomcat Access Log after n days?

开发者 https://www.devze.com 2022-12-29 09:59 出处:网络
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

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, 开发者_C百科is that correct?


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.


For Tomcat 7 you can config tomcat/conf/logging.properties. Example:

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

Note: that 1 is not a typo.

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

Note: this does not affect access log files, which are handled by the Access Log Valve, not by the main Tomcat (Apache Commons) logging.


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"


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


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


For tomcat 9 its part of access log configuration. See http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Access_Logging:

maxDays
The maximum number of days rotated access logs will be retained for before being deleted. If not specified, the default value of -1 will be used which means never delete old files.


If you use tomcat within spring boot you can use server.tomcat.accesslog.max-days=3 to delete old files after e. g. 3 days.

A minimal working configuration with spring boot to log the accesslog would be:

server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.directory=C:/path/to/dir
server.tomcat.accesslog.max-days=3

References:

  • https://www.baeldung.com/spring-boot-embedded-tomcat-logs
  • https://github.com/spring-projects/spring-boot/blob/71df2f311b04462784a76ed0b9288f2d659a68eb/spring-boot-project/spring-boot-docs/src/main/asciidoc/appendix/application-properties.adoc


run in terminal:

locate RELEASE-NOTES | egrep 'tomcat|apache' | xargs grep "Apache Tomcat Version"
0

精彩评论

暂无评论...
验证码 换一张
取 消