tomcat 如何清除 Catalina 而不禁用进一步的日志记录?

wtlkbnrh  于 2022-11-13  发布在  其他
关注(0)|答案(8)|浏览(273)

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

5f0d552i

5f0d552i1#

如果在tomcat停止后删除catalina.out,则一旦tomcat再次启动,它将创建一个新的catalina.out,这是完全安全的。
但是如果您在tomcat运行时删除catalina.out,它将继续登录到已经删除的catalina.out(文件的引用由tomcat持有),因此空间不会被释放。因此您需要重新启动tomcat服务器来释放空间。不建议这样做。
实际上,您可以使用下面的命令清除catalina.out文件的日志,而无需停止tomcat。

sudo cat /dev/null > /opt/tomcat/apache-tomcat-9.0.37/logs/catalina.out

要使catalina.out更小,可以使用以下方法之一:
1.您可以使用上面的Linux命令,并将其添加到CronScheduler,以便根据需要每天/每周/每月或每年运行一次。
1.在Linux中使用logrotate工具。它是Linux中的一个日志管理命令行工具。它可以在不同的情况下轮转日志文件。特别是,**我们可以在固定的持续时间内轮转日志文件,或者在文件增长到一定大小时轮转日志文件。**您可以单击此处了解有关此操作的更多信息。

okxuctiv

okxuctiv2#

简单直接的解决方案:
Catalina ,通话完毕
注意:如果需要,请添加sudo

okxuctiv

okxuctiv3#

轻而易举:echo > catalina.out。文件描述符不会更改,并且java可以继续写入该文件。

ct2axkht

ct2axkht4#

传统的方法是

cat /dev/null > catalina.out

它将清除日志文件,并且不会中断当前持有打开的文件句柄的进程。
更好的方法是不丢失您的日志信息,方法是旋转出日志文件。

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

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

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

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

aurhwmvo

aurhwmvo5#

您可以截断文件。这在逻辑上也是有意义的,因为它本质上是您正在尝试做的事情。
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中的更改。

bqf10yzr

bqf10yzr6#

您要寻找的是日志轮转。由于这需要在进程运行时使用低级别的signal support,因此您应该间接地执行此操作。您可以使用this procedure来实现此操作。Tomcat Wiki上也有此文档。

6za6bjd0

6za6bjd07#

进入文件夹/opt/tomcat/logs/在命令行中键入sudo echo〉 Catalina .out
而不停止tomcat。。这将始终工作。您也可以在每天或每周的基础上计划此命令。。

pbpqsu0x

pbpqsu0x8#

转到文件夹/opt/tomcat/logs/在命令行中键入--
sudo echo〉 Catalina .通话完毕
您可以在不关闭tomcat服务器的情况下运行此命令。.您还可以将此命令排定为每天或每周运行。.

相关问题