在 CentOS 上 Java 应用日志为空,通常不是“没有日志”,而是日志没有按你预期的方式输出或写入。下面按最常见原因 → 排查方法给你一个系统性的排查清单。
如果程序没跑起来,当然不会有日志。
排查:
ps -ef | grep java
或
systemctl status your-service
✅ 确认进程存在
✅ 没有 exit / ERROR 在启动阶段就结束
很多 Java 应用(尤其是 Spring Boot)默认:
常见情况:
nohup java -jar app.jar &
日志可能在:
nohup.out
排查:
ls -lh nohup.out
tail -f nohup.out
如果是 systemd:
# 默认 stdout 会进 journal
StandardOutput=journal
查看:
journalctl -u your-service -f
Java 不会自动创建日志目录
现象:
排查:
ls -ld /var/log/your-app
如果目录不存在:
mkdir -p /var/log/your-app
chown appuser:appuser /var/log/your-app
⚠️ 注意:
Java 日志框架优先级:
常见问题:
logback.xml / log4j2.xml 路径错误排查: 启动时加参数:
java -Dlogback.debug=true -jar app.jar
或:
java -Dlog4j2.debug -jar app.jar
你会看到日志系统加载了哪个配置文件。
比如你只配置了:
<root level="ERROR">
那 INFO / DEBUG 日志都不会输出。
排查: 确认:
<root level="INFO">
或临时改成:
<root level="DEBUG">
常见于:
例如:
java -jar app.jar > /dev/null 2>&1
✅ 症状:
排查:
ps -ef | grep java
看启动参数
CentOS 默认开启 SELinux,可能阻止 Java 写目录。
排查:
getenforce
如果是 Enforcing,尝试:
setenforce 0
再观察日志是否出现。
✅ 如果是 SELinux 问题,需要:
semanage fcontext -a -t var_log_t "/var/log/your-app(/.*)?"
restorecon -Rv /var/log/your-app
症状:
排查:
df -h
如果磁盘满:
du -sh /* | sort -h
# 1. 看进程启动参数
ps -ef | grep java
# 2. 看文件句柄(日志文件是否被打开)
lsof -p <pid> | grep log
# 3. 看 systemd 日志
journalctl -u your-service -f
你可以直接贴出:
我可以 直接指出是哪一条导致日志为空,并给你一份正确配置示例。