我们的catalina.out文件每隔一段时间变得非常大(是的,我在我的应用程序中实现slf4j和logback以防止将来出现这种情况)。但是现在,当我去循环日志时,我将catalina.out复制到catalina。{date}并执行cat /dev/null > catalina.out
。问题是,在我这样做之后,tomcat将不再捕获日志,直到第二天早上tomcat重新启动,这并不理想。为什么会这样?有没有办法避免它?
答案 0 :(得分:19)
像蛋糕一样容易:echo > catalina.out
。文件描述符不会改变,java
可以继续写入该文件。
答案 1 :(得分:12)
传统方式是
cat /dev/null > catalina.out
它将清除日志文件,并且不会中断当前保存打开文件句柄的进程。
更好的方法是通过旋出日志文件来丢失日志信息。为此,请创建或编辑文件/etc/logrotate.d/tomcat
并阅读其内容
/var/log/tomcat/catalina.out { copytruncate daily rotate 7 compress missingok size 5M }
然后使用命令(以root身份)重新启动logrotate
/usr/sbin/logrotate /etc/logrotate.conf
您应该每天将日志文件轮换出来,或者如果大小超过5M,则保留最后七个日志以进行调试。
答案 2 :(得分:8)
您可以截断该文件。这也具有逻辑意义,因为它基本上就是你想要做的事情。
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的变化。
答案 3 :(得分:1)
您正在寻找的是日志轮换。由于在进程运行时需要低级signal support,因此应间接执行此操作。您可以使用this procedure来实现此目的。这也记录在Tomcat Wiki上。
答案 4 :(得分:1)
转到文件夹/ opt / tomcat / logs / 在命令行中输入-
sudo echo> catalina.out
您可以运行此程序而无需关闭tomcat服务器。 。 您还可以每天或每周安排此命令。
答案 5 :(得分:0)
转到文件夹/ opt / tomcat / logs / 在命令行输入 sudo echo> catalina.out
不停止tomcat。 。这将始终有效。 您还可以每天或每周安排此命令。