使用grep配合上下文显示
# 显示ERROR前后5行(最常用)
grep -B 5 -A 5 "ERROR" 日志文件.log
# 显示FATAL前后10行
grep -B 10 -A 10 "FATAL" 日志文件.log
# 同时显示前后5行(简写)
grep -C 5 "ERROR" 日志文件.log
使用tail和grep组合
# 实时跟踪日志,高亮显示ERROR
tail -f 日志文件.log | grep --color=always -E "ERROR|FATAL"
# 实时查看错误及其上下文
tail -f 日志文件.log | grep -C 3 -E "ERROR|FATAL"
使用less查看
# 用less打开日志
less 日志文件.log
# 在less中搜索(按/然后输入)
/ERROR
# 按n跳转到下一个匹配,按N跳转到上一个
# 按v进入编辑模式查看上下文
查找特定时间端的错误
# 假设日志格式:2026-03-20 10:30:15 ERROR ...
# 查找某个时间点之后的错误
sed -n '/2026-03-20 14:30/,/2026-03-20 15:00/p' 日志文件.log | grep ERROR
# 或者用awk
awk '/2026-03-20 14:30/{flag=1} /2026-03-20 15:00/{flag=0} flag' 日志文件.log | grep ERROR
实用组合命令
找出所有错误并保存到文件
grep -B 3 -A 3 "ERROR" 日志文件.log > error_context.log
统计错误数量
grep "ERROR" 日志文件.log | wc -l
查看最新的几个错误
# 从文件末尾向前搜索(先tac反转文件)
tac 日志文件.log | grep -m 5 -B 3 "ERROR" | tac
针对常用的日志文件的快捷命令
# Java应用日志
grep -C 5 "Exception" catalina.out
# 系统日志
sudo grep -C 5 "ERROR" /var/log/syslog
# Docker容器日志
docker logs 容器名 2>&1 | grep -C 5 "ERROR"
实际使用案例
# 1. 先找到错误出现的位置
grep -n "ERROR" app.log | head -5
# 2. 查看具体错误及其上下文
grep -B 5 -A 10 "NullPointerException" app.log
# 3. 如果日志很大,可以先定位时间
less app.log
# 然后在less中搜索 /2026-03-20 14:.*ERROR