读懂 CentOS 上的 Java 日志,关键在于 知道日志在哪、日志格式是什么、如何结合系统环境分析。下面按实战思路给你一个完整指南。
常见框架:
常见文件:
/var/log/xxx/xxx.log
/opt/app/logs/app.log
~/logs/app.log
示例:
tail -f /opt/app/logs/app.log
当 Java 这样启动时:
java -jar app.jar
日志可能在:
查看方式:
journalctl -u your-service-name -f
或:
nohup.out
如果 JVM 参数中有:
-Xlog:gc*
或老版本:
-XX:+PrintGCDetails -Xloggc:/var/log/gc.log
GC 日志常见内容:
/var/log/messages
/var/log/syslog
journalctl -xe
用于排查:
ps -ef | grep java
或:
jps -l
systemctl status your-app
cat /usr/lib/systemd/system/your-app.service
常见配置:
StandardOutput=append:/var/log/app/app.log
StandardError=append:/var/log/app/error.log
find / -name "*.log" 2>/dev/null | grep -i java
2026-01-21 10:32:15.123 [main] INFO com.xxx.Service - 服务启动成功
含义:
| 部分 | 含义 |
|---|---|
| 时间戳 | 发生时间 |
| 线程 | main / http-nio / pool |
| 日志级别 | INFO / WARN / ERROR |
| 类名 | 日志来源 |
| 内容 | 真正的信息 |
ERROR > WARN > INFO > DEBUG
✅ 排错优先看 ERROR 和 WARN
java.lang.NullPointerException
at com.xxx.Service.doSomething(Service.java:45)
✅ 重点看:
at xxx.xxx(类名:行号)java.lang.OutOfMemoryError: Java heap space
✅ 排查方向:
Timeout waiting for connection
Task rejected from thread pool
✅ 重点看:
tail -f app.log
grep -i error app.log
grep -i exception app.log
grep -c ERROR app.log
sed -n '/2026-01-21 10:00/,/2026-01-21 11:00/p' app.log
dmesg | grep -i oom
journalctl -k | grep -i oom
jstat -gc <pid>
jstack <pid> > stack.txt
✅ 标准流程
你可以直接贴:
我可以 逐行帮你解读,并告诉你 下一步该查什么。