温馨提示×

如何设置Tomcat日志记录策略

小樊
35
2026-06-30 17:08:40
栏目: 智能运维

Tomcat 的日志主要由 logging.properties 控制,也常与 log4j / logback / log4j2 等框架配合使用。下面按“常见场景 + 配置方式”给你一个完整说明。


一、Tomcat 自带 JULI 日志(默认方式)

Tomcat 默认使用 java.util.logging(JULI),配置文件为:

$TOMCAT_HOME/conf/logging.properties

1️⃣ 默认日志策略

  • 日志目录:
    $TOMCAT_HOME/logs
    
  • 默认文件:
    • catalina.out:标准输出(默认不切割)
    • localhost.*.log
    • host-manager.*.log
    • manager.*.log

2️⃣ 修改日志级别

编辑 conf/logging.properties

.level = INFO

org.apache.catalina.level = INFO
org.apache.catalina.startup.level = WARN

级别说明(由低到高):

FINEST < FINER < FINE < CONFIG < INFO < WARNING < SEVERE

3️⃣ 设置日志文件大小和滚动策略(常用)

Tomcat JULI 支持 按大小切割

1catalina.org.apache.juli.AsyncFileHandler.level = INFO
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.

# 单个文件大小(默认 1MB)
1catalina.org.apache.juli.AsyncFileHandler.limit = 10485760

# 保留文件数
1catalina.org.apache.juli.AsyncFileHandler.count = 10

✅ 效果:

  • 每个 catalina 日志最大 10MB
  • 最多保留 10 个历史文件

4️⃣ 禁止 catalina.out 无限增长(重要)

Tomcat 默认情况下 catalina.out 不会滚动

✅ 建议做法(Linux):

# 使用 logrotate
vim /etc/logrotate.d/tomcat
/opt/tomcat/logs/catalina.out {
    daily
    rotate 7
    missingok
    notifempty
    compress
    copytruncate
}

二、使用 Log4j / Logback / Log4j2(推荐生产环境)

✅ 为什么推荐

  • 支持 按天、按大小、压缩
  • 支持异步日志
  • 比 JULI 更灵活

三、Tomcat + Log4j2 示例(最常用)

1️⃣ 引入依赖(Tomcat 9+)

Tomcat 官方已支持 Log4j2:

$TOMCAT_HOME/lib

放入:

  • log4j-api-2.x.jar
  • log4j-core-2.x.jar
  • log4j-jul-2.x.jar

2️⃣ 替换 JULI

复制:

$TOMCAT_HOME/bin/tomcat-juli.jar

替换为 Log4j2 提供的版本(官方说明一致)


3️⃣ 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.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
    </Appenders>

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

✅ 效果:

  • 每天一个日志
  • 自动压缩
  • 保留 30 天

四、应用日志 vs Tomcat 日志(建议分开)

类型 配置位置
Tomcat 自身 conf/logging.properties
应用日志 应用内 log4j2.xml / logback.xml

✅ 最佳实践:

  • Tomcat:只记录启动、容器级错误
  • 应用:记录业务日志

五、常见问题

❓ catalina.out 越来越大?

  • 默认不切割
  • ✅ 用 logrotate 或禁用 catalina.out

❓ 想只记录 ERROR?

.level = SEVERE

❓ 日志时间不对?

  • 检查系统时区
  • Log4j2 可指定 %d{yyyy-MM-dd HH:mm:ss Z}

六、推荐配置(总结)

场景 建议
测试环境 Tomcat 默认
生产环境 Log4j2 / Logback
防止磁盘满 按天切割 + 压缩
容器环境 输出到 stdout + 日志采集

如果你愿意,可以告诉我:

  • Tomcat 版本
  • Linux / Windows
  • 是否使用 Docker
  • 是否需要只记录 ERROR

我可以帮你直接生成完整配置文件

0