如何旋转tomcat localhost日志?

che*_*rit 15 logging tomcat admin

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

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

Lam*_*art 15

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

鉴于这种限制,我担心(从我能够从文档中学到的东西)没有自动的方法来做你想做的事情(根据大小单独旋转日志文件).

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

既然你提到了一个限制性的系统管理员,我认为这个服务器不在你的控制之下,所以这条路径是无关紧要的.如果您确实能够修改Tomcat的日志配置,那么希望您知道在哪里可以找到相应的文件.

在该.xml文件中,查找将className设置为"org.apache.catalina.valves.AccessLogValve" 的Valve实体,该部分为您的站点的适当主机配置"Catalina"引擎(在我的情况下为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" />
Run Code Online (Sandbox Code Playgroud)

要将此更改为每月日志轮换,我只需添加适当的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" />
Run Code Online (Sandbox Code Playgroud)

由于我能够(并且愿意)使用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" />
Run Code Online (Sandbox Code Playgroud)

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

  • "我完全关闭了Tomcat的内置日志轮换和基于日期的文件命名" - 你究竟是怎么做到的? (2认同)
  • 发现它在[这里](http://tomcat.apache.org/tomcat-5.5-doc/config/valve.html).只需设置`rotate ="false"`所以在conf/server.xml中你将有一个类似`<Valve className ="org.apache.catalina.valves.AccessLogValve"directory ="logs"rotate ="false"pattern =" %h%l%u%t&quot;%r&quot;%s%b"prefix ="localhost_access"suffix =".log"/>` (2认同)

Col*_*ers 6

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

  • Collin:这确实解决了问题,访问日志是按文件大小旋转的吗?据我所知,Tomcat仍然会使用它的AccessLogValve,它有关于文件名模式和旋转的完全自己的规则.完全独立于JUL或log4j配置. (2认同)