CentOS上排查Java日志的实用流程
一、定位日志来源与进程
ps -ef | grep java、jps -v。logging.file.name=logs/application.log 指定。journalctl -u your-app.service 查看服务日志;必要时加 --since "1 hour ago" 聚焦最近时段。tail -f /path/to/app.log;定位错误用 grep -n "ERROR" /path/to/app.log;按时间窗口查看可用 sed -n '/2025-11-25 10:00/,/2025-11-25 11:00/p' app.log。ls -l /path/to/logs/、chmod 644 /path/to/app.log。二、高效检索与上下文定位
grep -A 20 -B 5 "Exception" app.log 查看异常前后上下文。sed 或 awk 按时间窗口提取日志片段,便于还原问题现场。三、常见错误与快速修复对照表
| 现象关键词 | 可能原因 | 快速验证 | 修复建议 |
|---|---|---|---|
| OutOfMemoryError | 堆内存不足、内存泄漏 | grep -n "OutOfMemoryError" app.log;结合GC日志 |
增加堆内存:-Xmx2g -Xms1g;分析堆dump;优化缓存/对象生命周期 |
| ClassNotFoundException / NoClassDefFoundError | 依赖缺失/类路径错误 | 查看启动日志与类加载错误行 | 检查 classpath、依赖版本与打包(fat jar);修复依赖冲突 |
| SQLException / Connection refused | 数据库配置错误/服务不可达 | 查连接串、用户名、密码、端口 | 校验数据库地址、账号权限、网络连通性;确认数据库服务运行 |
| ClassCastException / NoSuchMethodError | 版本不兼容/依赖冲突 | 查看异常栈中具体类与版本 | 统一依赖版本;排除冲突依赖;必要时回退/升级版本 |
| 日志框架冲突/循环依赖 | 多日志框架并存(如 log4j 与 logback) | 启动期出现 SLF4J/Log4j 警告 | 保留单一实现,清理桥接与重复依赖;仅保留一个日志配置文件 |
| Permission denied / No space left on device | 日志目录无写权限/磁盘满 | ls -ld logs/、df -h |
修正目录权限(如 chmod/chown);清理或扩容磁盘;配置日志轮转 |
四、临时增强日志与重启策略
log4j.rootLogger=DEBUG, stdout, file<root level="DEBUG">...</root>java -Dlog4j.configuration=file:/path/to/log4j.properties -jar app.jarjava -Dlogback.configurationFile=/path/to/logback.xml -jar app.jarMaxFileSize=10MB、MaxBackupIndex=10maxHistory=30systemctl restart your-app.service;验证无误后再恢复为 INFO/WARN 级别,避免产生过多日志。五、长期治理与集中化方案