一尘不染

如何旋转tomcat localhost日志?

tomcat

我在Linux系统中使用tomcat
6x。它打印像本地主机的日志文件localhost.2011-06-07localhost.2011-06-08每天的基础上。我想在达到1MB时旋转localhost。

我可以为我的Web应用旋转log4j中的日志文件。但是这个tomcat的localhost日志文件,我无法使其旋转。除了使用logrotate以外,还有其他解决方案吗?


阅读 243

收藏
2020-06-16

共1个答案

一尘不染

不想 使用logrotate,还是您的系统管理员不允许您这样做?

鉴于这种限制,我恐怕(从我从文档中学到的知识)没有自动方法来做您想要的事情(仅根据大小旋转日志文件)。

如果您只想停止Tomcat 每天 创建新日志的默认行为(我发现这对于开发环境或低流量站点非常烦人),则可以通过更改访问日志“ Valve” 的
fileDateFormat 属性来做到这一点。,它在Ubuntu Server上定义在 /etc/tomcat7/server.xml中
。对于Tomcat 6,它可能位于类似的位置。

由于您提到了严格的sys
admin,因此我认为该服务器不受您的控制,因此该路径无关紧要。如果您确实能够修改Tomcat的日志配置,则希望您知道在哪里可以找到适当的文件。

在该.xml文件中,在为您的站点的适当主机(在本例中为localhost)配置“ Catalina”引擎的部分中,查找 className 设置为“
org.apache.catalina.valves.AccessLogValve” 的Valve实体。尽管Tomcat
6文档没有提及它,但是可以推断出默认的fileDateFormat为“ yyyy-MM-
dd”。将日期包括在日志文件名中会告诉Tomcat(暗示)您也希望日志每天循环。如果您想使其轮换,例如每月仅旋转一次,只需将fileDateFormat更改为“
yyyy-MM”。

在我的服务器上,默认的Logging Valve定义是:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

要将其更改为每月日志轮换,我只需添加适当的fileDateFormat属性:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
           fileDateFormat="yyyy-MM" prefix="localhost_access_log." suffix=".txt"
           pattern="%h %l %u %t &quot;%r&quot; %s %b" />

由于我能够(并愿意)使用logrotate,因此我已完全关闭了Tomcat的内置日志轮换和基于日期的文件命名,并且只要日志达到1MB,就可以使用logrotate来轮换日志。

编辑 为了回答dgrant的问题,将更改为/etc/tomcat7/server.xml,而我正在使用的实际阀门配置是这样的:

<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
       pattern="combined" rotatable="false"
       prefix="access_log" />

请注意,“组合”模式与原始配置中的显式模式定义等效(至少对于Tomcat
7而言)。如果您想了解更多,所有这些都可以在我的原始文档链接中找到。只需在rotatable属性上查找该部分。

2020-06-16