Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
481 views
in Technique[技术] by (71.8m points)

logging - How to rotate the tomcat localhost log?

I am using tomcat 6x in a Linux system. It prints a localhost log file like localhost.2011-06-07, localhost.2011-06-08 on a daily basis. I want to rotate the localhost when it reaches 1MB.

I can rotate log files in log4j for my web apps. But this localhost log file of tomcat, I couldn't get it to rotate. Has any got a solution other than using logrotate?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Do you not want to use logrotate, or does your sys admin not allow you to?

Given that restriction, I'm afraid (from what I have been able to learn from the documentation) that there is no automatic way to do what you want (rotate log files based on the size alone).

If you merely want to stop Tomcat's default behavior of creating a new log every day (which I find extremely annoying for a development environment or low-traffic site), you can certainly do this by changing the fileDateFormat property of the Access Log "Valve", which on Ubuntu Server is defined in /etc/tomcat7/server.xml. It's probably in a similar location for Tomcat 6.

Since you mention a restrictive sys admin, I gather that this server is not under your control, so that path is irrelevant. If you do have the ability to modify Tomcat's log configuration, hopefully you know where to find the appropriate file.

In that .xml file, look for the Valve entity with className set to "org.apache.catalina.valves.AccessLogValve" in the section which configures the "Catalina" Engine for the appropriate host for your site (localhost in my case). Although the Tomcat 6 documentation doesn't mention it, one can deduce that the default fileDateFormat is "yyyy-MM-dd". Including the day in the log filename tells Tomcat (by implication) that you also want the log rotated every day. If you wanted it to be rotated, say, only once a month, just change the fileDateFormat to "yyyy-MM".

On my server, the default Logging Valve definition was this:

<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" />

To change this to monthly log rotation, I would just add the appropriate fileDateFormat attribute:

<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" />

Since I am able (and willing) to use logrotate, I have turned off Tomcat's built-in log rotation and date-based file naming completely, and simply use logrotate to rotate the logs whenever the log reaches 1MB.

Edit To answer dgrant's question, the changes were to /etc/tomcat7/server.xml, and the actual valve configuration I'm using is this:

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

Note that the 'combined' pattern is equivalent (at least for Tomcat 7) to the explicit pattern definition in the original configuration. All this is well-covered in my original documentation link if you want to read more. Just look for the section on the rotatable attribute.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...