CentOS 上 Java 日志缺失通常不是单一原因,而是日志配置、权限、路径、systemd、容器化或日志框架冲突等综合问题。下面按最常见 → 较少见系统梳理原因与排查方法。
很多应用默认日志路径在:
/var/log/xxx/
/logs/
./logs/
但:
✅ 排查:
ls -ld /var/log/xxx
pwd
✅ 解决:
mkdir -p /var/log/xxx
如果你是:
root 启动
但应用配置的是:
user=appuser
✅ 排查:
ls -ld /var/log/xxx
ps -ef | grep java
✅ 修复:
chown -R appuser:appuser /var/log/xxx
如果你用:
systemctl start yourapp
那么:
✅ 查看:
journalctl -u yourapp -f
✅ 解决(推荐):
# yourapp.service
StandardOutput=append:/var/log/yourapp/stdout.log
StandardError=append:/var/log/yourapp/stderr.log
然后:
systemctl daemon-reload
systemctl restart yourapp
常见组合:
但:
logback.xml / log4j2.xml 没被加载✅ 排查:
ps -ef | grep java
看是否有:
-Dlogging.config=...
✅ 验证是否加载配置:
jar tf yourapp.jar | grep log
✅ 显式指定:
java -Dlogging.config=/etc/yourapp/logback.xml -jar yourapp.jar
Spring Boot 默认:
✅ 正确配置 application.yml:
logging:
file:
name: /var/log/yourapp/app.log
level:
root: info
或使用 logback-spring.xml
✅ 检查:
getenforce
如果是 Enforcing,查看审计日志:
ausearch -m avc -ts recent
✅ 临时验证:
setenforce 0
✅ 永久解决:
semanage fcontext -a -t var_log_t "/var/log/yourapp(/.*)?"
restorecon -Rv /var/log/yourapp
✅ 检查:
df -h
df -i
✅ 查看:
dmesg | grep java
journalctl -k | grep oom
✅ 正确方式:
docker run -v /var/log/yourapp:/var/log/yourapp ...
# 1. 进程是否存在
ps -ef | grep java
# 2. 日志目录 & 权限
ls -ld /var/log/xxx
# 3. systemd 日志
journalctl -u yourapp -f
# 4. Java 启动参数
ps -ef | grep java | grep D
# 5. SELinux
getenforce
# 6. 磁盘
df -h
✅ 不要只依赖 stdout ✅ 日志路径写绝对路径 ✅ 统一用 systemd + 文件日志 ✅ Spring Boot 明确配置 logging.file ✅ 生产环境关闭 SELinux 或正确配置
如果你愿意,可以直接贴:
ps -ef | grep java 输出我可以 精准定位到你这个环境的具体原因。