插件窝 干货文章 tomcat如何配置保存7天滚动日志

tomcat如何配置保存7天滚动日志

catalina AsyncFileHandler apache localhost 294    来源:    2025-04-01

Tomcat 配置7天滚动日志指南

在Tomcat中配置7天滚动日志可以通过以下两种主要方式实现:

方法一:使用Tomcat内置的日志系统(JULI)

  1. 修改 conf/logging.properties 文件:
# 设置7天滚动日志
handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, 3manager.org.apache.juli.AsyncFileHandler, 4host-manager.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

.handlers = 1catalina.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

# 配置Catalina日志
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
1catalina.org.apache.juli.AsyncFileHandler.rotatable = true
1catalina.org.apache.juli.AsyncFileHandler.maxDays = 7
1catalina.org.apache.juli.AsyncFileHandler.encoding = UTF-8

# 配置localhost日志
2localhost.org.apache.juli.AsyncFileHandler.level = FINE
2localhost.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
2localhost.org.apache.juli.AsyncFileHandler.prefix = localhost.
2localhost.org.apache.juli.AsyncFileHandler.rotatable = true
2localhost.org.apache.juli.AsyncFileHandler.maxDays = 7
2localhost.org.apache.juli.AsyncFileHandler.encoding = UTF-8

# 其他日志处理器类似配置...

方法二:使用Log4j 2.x(推荐)

  1. 首先确保Tomcat已配置使用Log4j 2.x(需要添加相关JAR到lib目录)

  2. 创建或修改 conf/log4j2.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <RollingFile name="Catalina" 
            fileName="${sys:catalina.base}/logs/catalina.log"
            filePattern="${sys:catalina.base}/logs/catalina.%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%d [%t] %-5p %c- %m%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
            <DefaultRolloverStrategy max="7"/>
        </RollingFile>

        <RollingFile name="Localhost" 
            fileName="${sys:catalina.base}/logs/localhost.log"
            filePattern="${sys:catalina.base}/logs/localhost.%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="%d [%t] %-5p %c- %m%n" />
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
            <DefaultRolloverStrategy max="7"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Logger name="org.apache.catalina.core.ContainerBase.[Catalina].[localhost]" level="info" additivity="false">
            <AppenderRef ref="Localhost"/>
        </Logger>

        <Root level="info">
            <AppenderRef ref="Catalina"/>
        </Root>
    </Loggers>
</Configuration>

方法三:使用cronolog工具(Linux系统)

  1. 安装cronolog:

    # Ubuntu/Debian
    sudo apt-get install cronolog
    
    # CentOS/RHEL
    sudo yum install cronolog
    
  2. 修改 conf/server.xml 文件中的Access Log配置:

    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
          prefix="localhost_access_log" suffix=".log"
          pattern="%h %l %u %t &quot;%r&quot; %s %b"
          rotatable="true"
          renameOnRotate="true"
          fileDateFormat="yyyy-MM-dd" />
    
  3. 对于Catalina输出,可以修改 bin/catalina.sh(Linux)或 bin/catalina.bat(Windows):

    # 修改输出行(大约在文件末尾)
    exec "$_RUNJAVA" "$LOGGING_CONFIG" $JAVA_OPTS $CATALINA_OPTS \
     -Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
     -Dcatalina.base="$CATALINA_BASE" \
     -Dcatalina.home="$CATALINA_HOME" \
     -Djava.io.tmpdir="$CATALINA_TMPDIR" \
     org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
     | /usr/sbin/cronolog "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.log >> /dev/null &
    

注意事项

  1. 修改配置后需要重启Tomcat生效
  2. 确保日志目录有足够的磁盘空间
  3. 在生产环境中,建议定期监控日志文件大小和数量
  4. 对于Windows系统,方法三可能需要调整脚本语法

以上配置将确保Tomcat日志按天滚动,并自动保留最近7天的日志文件,删除更早的日志。