我正在使用以下设置编写 Tomcat 日志:
AccessLogValve
使用in配置日志server.xml
Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs/access" prefix="access" suffix=".log" pattern="common" rotatable="false"
用于
logrotate
每天轮换日志文件并删除旧的日志文件。/app/logs/access/access.log { daily dateext missingok rotate 14 maxage 14 compress delaycompress dateyesterday }
奇怪的是,每天都会用 更改日志文件的名称logrotate
,例如,并创建access.log-20171222
一个新的日志文件。但是,Tomcat 仍然会将日志写入重命名的文件。access.log
我现在的解决方案是将选项添加copytruncate
到logrotate
.但是,使用此选项,截断时可能会丢失一些日志。
谁能提出更好的解决方案?
谢谢。
答案1
根据这文档中,您应该将可旋转选项保留为 true (默认),以便它不会始终写入同一个文件。您还可以将文件名字符串格式化为固定值,这样您就不会在其中获取日期。只要确保在内部轮转之前运行 logrotate ,这样新日志就不会面临覆盖最后一个日志的风险(因为它被重命名)。