我在 Linux 系统中使用 tomcat 6x。它每天打印一个本地主机日志文件,如 localhost.2011-06-07
、localhost.2011-06-08
。我想在达到 1MB 时轮换本地主机。
我可以在 log4j 中为我的网络应用轮换日志文件。但是这个 tomcat 的 localhost 日志文件,我无法让它旋转。除了使用 logrotate,还有其他解决方案吗?
最佳答案
您不想使用 logrotate,还是您的系统管理员不允许您这样做?
考虑到这一限制,恐怕(根据我从 documentation 中了解到的情况)没有自动方法来执行您想要的操作(仅根据大小轮换日志文件)。
如果您只是想阻止 Tomcat 的默认行为每天 创建一个新日志(我发现这对于开发环境或低流量站点来说非常烦人),您当然可以通过更改来做到这一点访问日志“Valve”的 fileDateFormat 属性,它在 Ubuntu 服务器上定义在 /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 "%r" %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 "%r" %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 - 如何轮转tomcat localhost日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278614/