如何旋转tomcat localhost日志?

时间:2011-06-08 12:22:05

标签: tomcat logging admin

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

我可以在log4j中为我的网络应用程序轮换日志文件。但是这个tomcat的localhost日志文件,我无法让它旋转。除了使用logrotate之外,有没有其他解决方案?

4 个答案:

答案 0 :(得分:15)

你不希望使用logrotate,或者你的系统管理员不允许你这样做?

考虑到这种限制,我害怕(从我能够从documentation学到的东西),没有自动的方法来做你想要的事情(根据大小单独旋转日志文件)。

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

由于您提到了限制性的sys管理员,我认为该服务器不在您的控制之下,因此该路径无关紧要。如果您确实能够修改Tomcat的日志配置,那么希望您知道在哪里可以找到相应的文件。

在该.xml文件中,在为适当主机配置“Catalina”引擎的部分中查找将 className 设置为“org.apache.catalina.valves.AccessLogValve”的Valve实体为您的网站(在我的情况下localhost)。虽然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的内置日志轮换和基于日期的文件命名,只需使用logrotate在日志达到1MB时轮换日志。

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

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

请注意,'组合'模式与原始配置中的显式模式定义相同(至少对于Tomcat 7)。如果您想了解更多信息,请在我的原始文档链接中详细介绍所有这些内容。只需查看rotatable属性上的部分。

答案 1 :(得分:6)

您知道,我最终按照Tomcat网站上的说明用Log4J替换了默认的Tomcat日志记录(java.util.logging):http://tomcat.apache.org/tomcat-6.0-doc/logging.html#Using_Log4j

答案 2 :(得分:2)

在Tomcat 7上应该很容易:see this docs

renameOnRotate属性

  

默认情况下,可旋转日志将显示活动访问日志文件名   包含fileDateFormat中的当前时间戳。在旋转期间   文件已关闭,名称中包含下一个时间戳的新文件   创建和使用。将renameOnRotate设置为true时,时间戳   不再是活动日志文件名的一部分。仅在轮换期间   文件已关闭,然后重命名以包含时间戳。这是   类似于基于时间的大多数日志框架的行为   回转。默认值:false

答案 3 :(得分:1)

我正在使用 mmlog,这是一个简单、轻量且非侵入性的工具。请参考“https://github.com/liurui-1/mmlog”。我已经在生产系统中使用它很多年了。

例如,您的 Tomcat 安装在 Linux/x64 上并且位于目录“TOMCAT_HOME=/opt/apache-tomcat-9.0.44”中。对于 Linux,从页面 https://github.com/liurui-1/mmlog/blob/master/build/linux.amd64/mmlog 向下 mmlog 并复制到目录“$TOMCAT_HOME/bin”。使用以下命令启动Tomcat。然后你让你的 Tomcat 日志轮换。更多详情请参考“https://github.com/liurui-1/mmlog”。

export TOMCAT_HOME=/opt/apache-tomcat-9.0.44
export CATALINA_OUT_CMD="nohup $TOMCAT_HOME/bin/mmlog"
export MM_LOGFILE=$TOMCAT_HOME/logs/tomcat
export MM_LOGSIZE=1000000
$TOMCAT_HOME/bin/startup.sh