在 CentOS 上 Java 日志不输出,通常不是 Java 本身的问题,而是环境、权限、日志框架配置或 systemd/stdout 重定向导致的。下面按最常见原因 → 排查方法 → 解决方案给你一个系统性的排查清单。
如果你是:
java -jar app.jar
但看不到日志,先确认:
ps -ef | grep java
看是否有:
> /dev/null✅ Systemd 的 Java 程序默认不会直接输出到终端
systemctl start appjournalctl 里也没有systemd 默认接管 stdout/stderr,而不是终端
journalctl -u your-service-name -f
[Unit]
Description=Java App
After=network.target
[Service]
User=appuser
ExecStart=/usr/bin/java -jar /opt/app/app.jar
SuccessExitStatus=143
Restart=always
[Install]
WantedBy=multi-user.target
✅ 不要手动加 > log.txt
检查是否存在配置文件:
find . -name "logback.xml"
find . -name "log4j2.xml"
src/main/resources 但被打进 jar 后路径不对✅ 强制指定配置文件:
java -Dlogback.configurationFile=/opt/app/logback.xml -jar app.jar
或:
java -Dlogging.config=/opt/app/log4j2.xml -jar app.jar
<root level="ERROR">
<root level="INFO">
或临时测试:
java -Dlogging.level.root=DEBUG -jar app.jar
ls -ld /var/log/app
<file>/var/log/app/app.log</file>
但:
mkdir: cannot create directory
Permission denied
sudo mkdir -p /var/log/app
sudo chown appuser:appuser /var/log/app
getenforce
如果是 Enforcing:
sudo setenforce 0
✅ 如果日志立刻出现,就是 SELinux 问题
semanage fcontext -a -t var_log_t "/var/log/app(/.*)?"
restorecon -Rv /var/log/app
nohup java -jar app.jar >/dev/null 2>&1 &
✅ 改成:
nohup java -jar app.jar > app.log 2>&1 &
Spring Boot 默认:
logging.file.name=/var/log/app/app.log
logging.level.root=info
✅ 按顺序执行:
ps -ef | grep java
journalctl -u 服务名 -f
ls -l /var/log/app
java -Dlogback.debug=true -jar app.jar
getenforce
你可以直接贴:
1️⃣ CentOS 版本
2️⃣ Java 启动方式(systemd / nohup / 手动)
3️⃣ 日志框架(logback / log4j2 / jul)
4️⃣ 你的 java -jar 或 systemd 配置
我可以 直接帮你改到可用 ✅