如何在不禁用进一步日志记录的情况下清除 catalina.out?

新手上路,请多包涵

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

原文由 Jibby 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 408
2 个回答

像蛋糕一样简单: echo > catalina.out 。文件描述符不会更改, java 可以继续写入该文件。

原文由 Michael-O 发布,翻译遵循 CC BY-SA 3.0 许可协议

传统的方法是

cat /dev/null > catalina.out

它将清除日志文件,并且不会中断当前持有打开文件句柄的进程。

更好的方法是通过轮换日志文件来不丢失您的日志信息。为此,创建或编辑文件 /etc/logrotate.d/tomcat 并读取其内容

/var/log/tomcat/catalina.out {   copytruncate   daily   rotate 7   compress   missingok   size 5M  }

然后使用命令重新启动 logrotate(以 root 身份)

 /usr/sbin/logrotate /etc/logrotate.conf

并且您应该每天轮换日志文件,或者如果大小超过 5M,则保留最后七个日志以用于调试目的。

原文由 Edwin Buck 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题