tomcat - 如何轮转tomcat localhost日志?

标签 tomcat logging admin

我在 Linux 系统中使用 tomcat 6x。它每天打印一个本地主机日志文件,如 localhost.2011-06-07localhost.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 &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 - 如何轮转tomcat localhost日志?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6278614/

相关文章:

Tomcat 和 Railo 迁移需要不区分大小写

java - 将部分更新部署到 Jelastic

python - 如何在 Python 中的函数入口、内部和导出处进行日志记录

java - 如何配置log4j以将同一记录器的不同日志级别记录到不同文件

ruby-on-rails - rails 3 管理员编辑另一个用户

java - Tomcat 7 和 CentOS 7 中的远程调试

ruby-on-rails - "Correct"从后台(Resque)作业写入日志输出的方法?

安卓移动控制

python - 根据先前的字段值选择过滤 Django 管理字段中的值列表

java - 一个应用程序代码具有多个上下文路径/部署以连接到不同的数据库