首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在不禁用进一步日志记录的情况下清除catalina.out?

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

Stack Overflow用户
提问于 2016-05-08 00:00:08
回答 8查看 56.8K关注 0票数 28

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

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2016-05-09 19:54:00

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

票数 49
EN

Stack Overflow用户

发布于 2016-05-09 19:57:05

传统的方法是

代码语言:javascript
复制
cat /dev/null > catalina.out

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

更好的方法是不丢失日志记录信息,方法是旋转出日志文件。为此,创建或编辑文件/etc/logrotate.d/tomcat并读取其内容。

代码语言:javascript
复制
/var/log/tomcat/catalina.out {   copytruncate   daily   rotate 7   compress   missingok   size 5M  }

然后使用命令(作为root用户)重新启动日志旋转。

代码语言:javascript
复制
/usr/sbin/logrotate /etc/logrotate.conf

您应该每天旋转日志文件,如果大小超过5M,则保留最后七个日志以进行调试。

票数 17
EN

Stack Overflow用户

发布于 2016-05-09 20:23:48

您可以截断文件。这也是合乎逻辑的,因为这基本上就是你想要做的事情。

truncate -s 0 M catalina.out

执行cat /dev/null > file不会改变文件的inode。

代码语言:javascript
复制
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中的更改。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37094871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档