【问题标题】:How to rotate the tomcat localhost log?如何旋转tomcat localhost日志?
【发布时间】:2011-09-10 20:08:59
【问题描述】:

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

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

【问题讨论】:

  • 我也很好奇这个……你有什么发现吗?

标签: tomcat logging admin


【解决方案1】:

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

【讨论】:

  • Collin:这是否真的解决了访问日志按文件大小轮换的问题?据我了解,Tomcat 仍然会使用它的 AccessLogValve,它在文件名模式和旋转方面有完全自己的规则。完全独立于 JUL 或 log4j 配置。
  • 我不确定访问日志。我把它关掉了,因为我们在 Tomcat 前面有 Apache。 log4j 的东西确实适用于 catalina.out 和 localhost.log 等。
【解决方案2】:

您是否想要使用 logrotate,或者您的系统管理员不允许您使用?

鉴于这一限制,我担心(从我从 documentation 中了解到的情况)没有自动的方法来做你想做的事(仅根据大小轮换日志文件)。

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

由于您提到了一个限制性的系统管理员,我推测该服务器不受您的控制,因此该路径是无关紧要的。如果您确实有能力修改 Tomcat 的日志配置,希望您知道在哪里可以找到合适的文件。

在该 .xml 文件中,在为相应主机配置“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 属性的部分。

【讨论】:

  • “我已经完全关闭了 Tomcat 的内置日志轮换和基于日期的文件命名” - 你到底是怎么做到的?
  • here 中找到它。只需设置rotatable ="false",因此在 conf/server.xml 中您将拥有类似&lt;Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" rotatable ="false" pattern="%h %l %u %t &amp;quot;%r&amp;quot; %s %b" prefix="localhost_access" suffix=".log"/&gt; 的条目
  • 另见stackoverflow.com/a/29749394/1339923 - renameOnRotate 属性对某些人有用。
【解决方案3】:

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

renameOnRotate 属性

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

【讨论】:

  • 非常有用,谢谢。我前一段时间投了赞成票,但想象一下它被否决了,因为它不是一个完整的答案。使用此属性的示例 &lt;Valve&gt; 配置可能比仅指向大型文档页面的链接更有帮助。
  • @Lambat 我不习惯提供鱼,我很高兴帮助其他人钓鱼。您只需打开文档页面并阅读renameOnRotate 属性即可使用它。没什么大不了的。
  • 我听到了,钓鱼课很棒,但是 StackOverflow 的池塘里也有很多美味的鱼……而且似乎他们通常得到最多的投票。 :)
  • 我对这个答案投了反对票,因为它似乎没有回答这个问题。该问题询问如何让日志根据大小旋转,这似乎与 renameOnRotate 属性无关。
【解决方案4】:

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

例如,您的 Tomcat 安装在 Linux/x64 上,并且位于目录“TOMCAT_HOME=/opt/apache-tomcat-9.0.44”中。向下 mmlog for Linux 从页面:https://github.com/liurui-1/mmlog/blob/master/build/linux.amd64/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

【讨论】:

    猜你喜欢
    • 2019-11-30
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    • 2021-07-14
    • 2015-08-14
    相关资源
    最近更新 更多