如何清除catalina.out而不禁用进一步的日志记录?

时间:2016-05-08 00:00:09

标签: java tomcat

我们的catalina.out文件每隔一段时间变得非常大(是的,我在我的应用程序中实现slf4j和logback以防止将来出现这种情况)。但是现在,当我去循环日志时,我将catalina.out复制到catalina。{date}并执行cat /dev/null > catalina.out。问题是,在我这样做之后,tomcat将不再捕获日志,直到第二天早上tomcat重新启动,这并不理想。为什么会这样?有没有办法避免它?

6 个答案:

答案 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。 。这将始终有效。 您还可以每天或每周安排此命令。