Java 日志在 CentOS 上“丢失”,通常不是真的没产生,而是被系统、容器或日志组件“处理掉”了。下面按最常见 → 较少见的原因给你完整排查思路。
现象
System.out.println() 或日志打到 console原因
systemdDockernohup java ... > /dev/null检查
# 是否重定向到了 /dev/null
ps -ef | grep java
✅ 解决
java -jar app.jar > logs/app.log 2>&1
或者 不要打 stdout,统一用日志框架。
典型情况
<file>/opt/app/logs/app.log</file>
但:
/opt/app/logs 不存在表现
✅ 解决
mkdir -p /opt/app/logs
chown -R appuser:appuser /opt/app/logs
CentOS 7/8 默认用 systemd
现象
systemctl start app原因
✅ 正确做法
app.service
[Service]
StandardOutput=journal
StandardError=journal
查看日志:
journalctl -u app -f
现象
docker logs 看不到原因
✅ 解决
docker run \
-v /data/logs:/app/logs \
java:8 \
java -jar app.jar
并确保日志路径是 /app/logs
配置错误
<root level="ERROR">
✅ 解决
<root level="INFO">
常见冲突:
log4jlog4j2logbackslf4j 无实现表现
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"
✅ 解决 保证只有一个实现:
logback-classic
或
log4j-core + log4j-api
df -h
du -sh /var/log/*
✅ 解决
getenforce
如果是 Enforcing:
setenforce 0
✅ 临时验证是否是 SELinux 问题
✅ 1. 日志到底在哪?
find / -name "*.log" 2>/dev/null
✅ 2. Java 进程输出在哪?
lsof -p <pid> | grep log
✅ 3. systemd / Docker?
systemctl status app
docker ps
✅ 4. 是否真的没打日志?
strace -p <pid> -e write
✅ 不要混用
✅ 统一用日志框架
✅ CentOS 上
/tmp你可以直接贴:
我可以 直接告诉你哪一行配置有问题 ✅