在 CentOS 上过滤 Java 日志,常见做法取决于日志来源(应用日志、systemd、容器、原始输出等)。下面按最常用场景给你一套可操作的方案。
一、按日志文件过滤(最常见)
1️⃣ 查看 Java 日志文件
Java 应用日志一般在:
/var/log/xxx.log
/opt/app/logs/app.log
~/logs/app.log
查看文件是否存在:
ls -lh /var/log/*.log
2️⃣ 使用 grep 过滤关键字
过滤 ERROR 日志
grep "ERROR" app.log
忽略大小写
grep -i "error" app.log
显示前后行(定位问题很常用)
grep -C 5 "NullPointerException" app.log
实时过滤(tail + grep)
tail -f app.log | grep "ERROR"
3️⃣ 按时间过滤日志
查看今天
grep "2024-01-21" app.log
查看某个时间段
grep "2024-01-21 10:" app.log
二、过滤 systemd 管理的 Java 服务日志
如果 Java 是通过 systemctl 启动的:
1️⃣ 查看服务日志
journalctl -u your-java-service.service
2️⃣ 只显示错误
journalctl -u your-java-service.service -p err
3️⃣ 实时查看
journalctl -u your-java-service.service -f
4️⃣ 按时间过滤
journalctl -u your-java-service.service --since "2024-01-21 10:00" --until "2024-01-21 11:00"
三、过滤 Java 进程标准输出(STDOUT)
1️⃣ 找到 Java 进程
ps -ef | grep java
2️⃣ 查看进程输出(nohup.out)
tail -f nohup.out | grep "ERROR"
四、过滤 Docker 中的 Java 日志(常见)
1️⃣ 查看容器日志
docker logs container_name
2️⃣ 过滤错误
docker logs container_name | grep "ERROR"
3️⃣ 实时查看
docker logs -f container_name | grep "Exception"
五、过滤常见 Java 异常
过滤异常
grep -E "Exception|Error|Throwable" app.log
过滤堆栈信息(多行)
grep -A 20 "NullPointerException" app.log
六、使用 awk / sed(进阶)
按时间段提取
awk '/2024-01-21 10:/,/2024-01-21 11:/' app.log
统计 ERROR 数量
grep -c "ERROR" app.log
七、推荐日志规范(避免以后难过滤)
✅ 日志格式统一
2024-01-21 10:00:01 [ERROR] xxx
✅ 使用日志框架
- Logback
- Log4j2
✅ 按级别分文件
app-info.log
app-error.log
八、你可以直接告诉我
为了给你更精确的命令,可以补充:
- Java 是 直接运行 / systemd / Docker ?
- 日志是 文件 / systemd / 容器日志 ?
- 想过滤 ERROR / 异常 / 某个接口 / 某个用户 ?
我可以帮你写一条100% 精准的过滤命令。
