Tomcat 日志“不输出”通常不是单一原因,而是日志配置、应用日志框架冲突、或运行方式导致的。下面按最常见 → 较少见的顺序帮你排查。
| 情况 | 常见原因 |
|---|---|
| Tomcat 自身启动日志看不到 | catalina.out / logging.properties 配置问题 |
| 自己写的 System.out / log 不输出 | 日志框架未生效 |
| 只有部分日志不输出 | 日志级别 / 包冲突 |
| Docker / systemd 启动没日志 | 输出被重定向 |
Tomcat 默认日志在:
$TOMCAT_HOME/logs/catalina.out
如果文件存在但没内容:
❌ 错误方式:
sh catalina.sh
✅ 正确方式:
sh startup.sh
# 或
sh catalina.sh run
catalina.sh run会直接输出到终端
startup.sh才会写 catalina.out
检查:
$TOMCAT_HOME/conf/logging.properties
确保有:
handlers = 1catalina.org.apache.juli.AsyncFileHandler
1catalina.org.apache.juli.AsyncFileHandler.level = FINE
1catalina.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
1catalina.org.apache.juli.AsyncFileHandler.prefix = catalina.
⚠️ 如果 handlers 被清空,Tomcat 会“完全不输出日志”。
src/main/resources/
├── logback.xml
├── log4j2.xml
└── log4j.properties
✅ 建议:
logback-spring.xmllogback.xml如果配置成:
<root level="ERROR">
那 INFO / DEBUG 一定看不到。
✅ 测试用:
<root level="DEBUG">
典型报错或现象:
SLF4J: Class path contains multiple SLF4J bindings
mvn dependency:tree | grep slf4j
✅ 正确组合(示例):
slf4j-api
logback-classic
❌ 错误组合:
slf4j-api
log4j-slf4j-impl
logback-classic ← 冲突
某些配置会禁用 stdout。
检查:
# logging.properties
java.util.logging.ConsoleHandler.level = ALL
Tomcat 日志必须输出到:
stdout / stderr
✅ 解决:
ln -sf /dev/stdout logs/catalina.out
StandardOutput=journal
StandardError=journal
✅ 是否用 startup.sh 启动
✅ logs/catalina.out 是否存在
✅ logging.properties 是否被改过
✅ 应用是否有 logback.xml / log4j2.xml
✅ 是否有 SLF4J 冲突
✅ 日志级别是否为 DEBUG
你可以直接贴:
1️⃣ Tomcat 版本
2️⃣ 是否 Spring Boot
3️⃣ 启动方式(IDE / shell / Docker)
4️⃣ 日志配置内容
5️⃣ mvn dependency:tree 中日志相关部分
我可以直接告诉你改哪一行就能看到日志 ✅