在 CentOS 上 Java 应用日志缺失是一个很常见的问题,通常不是 JVM 本身不写日志,而是环境、配置或权限导致日志没有按预期生成。下面按「最常见 → 较少见」的原因给你系统梳理一下。
Java 应用(尤其是非 root 用户运行)经常因为:
检查方式
ps -ef | grep java
ls -ld /var/log/yourapp
sudo -u appuser touch /var/log/yourapp/test.log
解决
mkdir -p /var/log/yourapp
chown -R appuser:appuser /var/log/yourapp
很多 Java 项目用:
如果:
logback.xml / log4j2.xml 没打包进去现象
检查
find / -name logback.xml 2>/dev/null
常见错误
<file>/var/log/app.log</file>
但目录不存在
CentOS 7/8 默认用 systemd
如果 Java 是:
java -jar app.jar
但没配置日志文件,日志会进 journalctl
查看
journalctl -u yourapp -f
解决
ExecStart=/usr/bin/java -jar /opt/app.jar >> /var/log/app.log 2>&1
如果你说的是 JVM 日志(gc.log)缺失:
-Xloggc:/var/log/gc.log
在 JDK 9+ 已废弃
✅ 正确方式(JDK 9+):
-Xlog:gc*:file=/var/log/gc.log:time
如果 JVM 直接挂:
查看
dmesg | grep java
journalctl -xe
CentOS 默认开启 SELinux
检查
getenforce
临时验证
setenforce 0
如果日志突然出现 → SELinux 问题
解决
semanage fcontext -a -t var_log_t "/var/log/yourapp(/.*)?"
restorecon -Rv /var/log/yourapp
df -h
df -i
logging.file.name=/var/log/app.log
❌ 错误写法:
logging.file=/var/log/app.log
你可以按顺序确认:
你可以贴出:
systemctl 配置(如果有)我可以直接告诉你缺在哪、怎么改。