每隔一段时间,我们的catalina.out文件就会变得非常大(是的,我将在我的应用程序中实现slf4j和logback,以防止将来发生这种情况)。但是现在,当我循环日志时,我会将catalina.out复制到catalina.{date}并执行cat /dev/null > catalina.out。问题是,在我这样做之后,tomcat将不会捕获更多的日志,直到tomcat在第二天早上重新启动,这并不理想。这一切为什么要发生?有什么办法可以避免吗?
发布于 2016-05-09 19:54:00
简单如蛋糕:echo > catalina.out。文件描述符不会改变,java可以继续写入该文件。
发布于 2016-05-09 19:57:05
传统的方法是
cat /dev/null > catalina.out它将清除日志文件,并且不会中断当前保存打开的文件句柄的进程。
更好的方法是不丢失日志记录信息,方法是旋转出日志文件。为此,创建或编辑文件/etc/logrotate.d/tomcat并读取其内容。
/var/log/tomcat/catalina.out { copytruncate daily rotate 7 compress missingok size 5M }然后使用命令(作为root用户)重新启动日志旋转。
/usr/sbin/logrotate /etc/logrotate.conf您应该每天旋转日志文件,如果大小超过5M,则保留最后七个日志以进行调试。
发布于 2016-05-09 20:23:48
您可以截断文件。这也是合乎逻辑的,因为这基本上就是你想要做的事情。
truncate -s 0 M catalina.out
执行cat /dev/null > file不会改变文件的inode。
logs]$ls -i test.log
19794063 test.log
logs]$
logs]$cat /dev/null > test.log
logs]$ls -i test.log
19794063 test.log此外,在这些命令期间,我有一个单独的命令将实时数据跟踪到test.log中。运行这些命令后,到test.log的尾仍然工作正常,没有问题。这并不能回答您为什么停止工作的问题,但它有助于排除inode中的更改。
https://stackoverflow.com/questions/37094871
复制相似问题