温馨提示×

centos java日志为啥丢失

小樊
37
2026-09-18 06:19:29
栏目: 编程语言

在 CentOS 上 Java 日志“丢失”是很常见的问题,通常不是真的没了,而是被其他机制接管、覆盖、清理或写错地方了。下面按最常见原因给你系统梳理一下。


一、被 systemd(journald)接管(非常常见)

现象

  • 你用 java -jar app.jar 或 systemctl start xxx
  • 日志没出现在你期望的文件里
  • journalctl -u 服务名 里却能看到

原因

CentOS 7+ 默认使用 systemd + journald

  • stdout / stderr 被 journald 捕获
  • 不会自动写回你配置的日志文件

解决

方式1:看 journal 日志

journalctl -u your-service -f

方式2:禁止 journal 接管

mkdir -p /etc/systemd/journald.conf.d
cat > /etc/systemd/journald.conf.d/override.conf <<EOF
[Journal]
ForwardToSyslog=yes
EOF

systemctl restart systemd-journald

方式3:服务里明确重定向

[Service]
StandardOutput=append:/var/log/app/app.out.log
StandardError=append:/var/log/app/app.err.log

二、日志被 logrotate 清掉(也很常见)

现象

  • 日志前一天还在
  • 第二天突然变小或没了

原因

/etc/logrotate.d/ 里配置了:

  • 每天/每周轮转
  • missingok
  • notifempty
  • postrotate 没通知 Java 重新打开文件

典型错误配置

/var/log/app/*.log {
    daily
    rotate 7
    missingok
    notifempty
    copytruncate  # ← 很多 Java 程序必须有这个
}

✅ Java 程序一定要 copytruncate 或支持日志重开


三、Java 日志路径不对(权限 / SELinux)

现象

  • 日志文件没生成
  • 或生成在奇怪目录

原因

  1. 用户没权限写日志目录
  2. SELinux 阻止写入

排查

ls -ld /var/log/app
ps -ef | grep java
getenforce

解决

chown -R appuser:appuser /var/log/app
setenforce 0   # 临时关闭测试

或加 SELinux 规则:

semanage fcontext -a -t var_log_t "/var/log/app(/.*)?"
restorecon -Rv /var/log/app

四、日志框架配置问题(Logback / Log4j)

常见问题

  • logback.xml 没生效
  • classpath 里有多个配置
  • Docker / systemd 下工作目录不对

检查

java -jar app.jar --debug

确认:

  • 使用的是哪个 logging 框架
  • 日志文件路径是绝对路径

五、进程被 kill,缓冲没刷

现象

  • 崩溃前日志没了
  • 尤其是 System.out.println

原因

  • 使用了 BufferedOutputStream
  • 进程被 kill -9

解决

  • 使用正式日志框架
  • 配置 immediateFlush=true(Logback)

六、磁盘满了 / inode 用完

df -h
df -i

快速排查清单(建议照着做)

# 1. 看 systemd 日志
journalctl -u 服务名 -n 100

# 2. 看进程实际输出
ls -l /proc/$(pgrep java)/fd

# 3. 看 logrotate
cat /etc/logrotate.d/*

# 4. 看磁盘
df -h; df -i

如果你愿意,可以告诉我:

  • ✅ CentOS 版本(7 / 8 / Stream)
  • ✅ Java 启动方式(jar / systemd / docker)
  • ✅ 用的日志框架(logback / log4j / 原生)
  • ✅ 日志“丢失”的具体现象

我可以直接帮你定位到是哪一条原因 + 给精确配置。

0 踩