高效日志查询常用命令

10 阅读2分钟

一 核心基础:精准定位关键词 + 上下文(最常用)

  1. 基础用法:匹配关键词 + 显示上下文

    # 找 a.log 中含 "ERROR" 的行,同时显示前3行(-B3)、后5行(-A5)
    grep -B 3 -A 5 "ERROR" a.log
    ​
    # 简化:-C5 = -B5 -A5(显示前后各5行),更常用
    grep -C 5 "ERROR" a.log
    
  2. 增强版:显示行号 + 忽略大小写(方便定位)

    # -n:显示匹配行的行号;-i:忽略大小写(比如匹配 Error/error/ERROR)
    grep -n -i -C 5 "timeout" a.log
    
  3. 多关键词匹配(或 / 且)

    # 匹配 "ERROR""WARN""timeout"(任意一个)
    grep -E "ERROR|WARN|timeout" a.log
    ​
    # 匹配含 "ERROR" 且 含 "timeout" 的行(同时满足)
    grep "ERROR" a.log | grep "timeout"
    ​
    # 匹配 "ERROR" 但排除 "ignored"(忽略无关错误)
    grep "ERROR" a.log | grep -v "ignored"
    

二 按时间范围筛选(日志带时间戳时超实用)

# 筛选 2026-02-09 10:20 到 10:30 之间的日志
sed -n '/2026-02-09 10:20:/,/2026-02-09 10:30:/p' a.log
​
# 结合 grep 进一步筛选该时间段内的 ERROR
sed -n '/2026-02-09 10:20:/,/2026-02-09 10:30:/p' a.log | grep -C 3 "ERROR"

三 实时监控日志(排查正在发生的问题)

# 实时监控 a.log 的新增内容(-f:follow 跟踪)
tail -f a.log
​
# 只监控新增的 ERROR 日志(最常用)
tail -f a.log | grep -i "ERROR"# 更健壮的实时监控(-F:日志文件被切割/替换后仍能继续监控)
tail -F a.log | grep -C 2 "timeout"

四 按行号定位(已知大概行号 / 从 grep 结果跳转)

# 查看 100-110 行的内容(定位 105 行的上下文)
sed -n '100,110p' a.log
​
# 只看第 105 行
sed -n '105p' a.log

五 统计高频问题(找最常出现的错误)

# 统计 ERROR 出现的总次数
grep "ERROR" a.log | wc -l
​
# 找出所有唯一的 ERROR 信息,并按出现次数降序排列(重点看高频)
grep "ERROR" a.log | sort | uniq -c | sort -nr

六 进阶:复杂日志(比如多列 / JSON 日志)

# 筛选日志中第 5 列是 "500" 的行(比如 HTTP 500 错误)
awk '$5 == "500"' a.log
​
# 结合 grep 查看这些 500 错误的上下文
awk '$5 == "500"' a.log | grep -C 2 "api/user"

总结

  1. 核心高频grep -n -i -C 5 "关键词" 日志文件(定位关键词 + 上下文 + 行号);
  2. 实时排查tail -F 日志文件 | grep "关键词"(监控实时新增的问题日志);
  3. 缩小范围:先通过 sed 按时间筛选日志,再用 grep 查关键词,效率更高;
  4. 统计分析grep "错误" 日志 | sort | uniq -c | sort -nr(找高频问题)。