如何设置Tomcat日志记录策略
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.*.loghost-manager.*.logmanager.*.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.jarlog4j-core-2.x.jarlog4j-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
我可以帮你直接生成完整配置文件。