首页/系统/Linux 运维命令速查/journalctl -p 按优先级过滤

journalctl -p 按优先级过滤

journal 日志分 emerg~debug 8 级,-p err 只看错误以上、-p warning 配 --since 做巡检;把噪音过滤掉是读日志效率的关键。

Linux 运维命令速查系统更新于 2026-10-13

journalctl -p

journal 为每条日志记录一个 PRIORITY 字段,沿用 syslog 的 0 到 7 共八级,数字越小越严重。-p 就是按这个级别过滤:-p err 表示 err 及以上(0 到 3 级),-p warning 会多出 warning 一级。日常巡检用高等级过滤能快速筛掉噪音,但要知道前提——应用的日志级别得打得对,把错误写成 info 的话,再严的过滤也捞不出来。

基本信息

用途按日志优先级(0 到 7)过滤 journal 条目
语法journalctl -p <级别名或数字> [其它选项]
所属systemd(journalctl / systemd.journal-fields 的 PRIORITY 字段)
常见搭配-b 当前启动、-u 指定单元、--since 时间窗、-n 限制条数、--no-pager 便于管道

典型使用场景

  • 日常巡检:只看当前启动的 err 及以上,快速判断机器有没有硬故障
  • 故障复盘:按时间窗拉出 warning 及以上的条目,还原异常发生前后的顺序
  • 服务排障:先按 -u 单元加 -p err 缩小范围,再放开级别看细节
  • 告警对账:确认监控告警对应的日志条目级别是否正确,避免误报漏报
  • 压测观察:压测期间盯 warning 及以上,捕捉资源紧张的先兆

常用示例

常用示例
journalctl -p err -b                     # 本次启动的错误及以上
journalctl -p err -b -u nginx --no-pager # 缩到单个服务
journalctl -p warning --since '1 hour ago' --no-pager | tail -n 50
journalctl -p err -n 100 -o short-iso    # 带 ISO 时间戳,便于与监控对齐
journalctl -p 3..5 -n 100                # 区间写法,按系统版本确认是否支持

级别对照

级别对照
0 emerg    系统不可用
1 alert    必须立即处理
2 crit     严重故障
3 err      错误
4 warning  警告
5 notice   正常但值得注意
6 info     常规信息
7 debug    调试信息

级别与运维动作对照

级别区间典型内容建议动作
0-2内核 panic、OOM 杀死进程、硬件故障立即介入,按时间点拉全量上下文
3服务启动失败、磁盘写入错误、认证被拒逐条定位根因,区分业务错误与系统错误
4-5资源接近阈值、重试成功、降级触发列入巡检清单,观察趋势不看单条
6-7常规业务输出与调试信息排障时临时打开,长期开启会明显放大日志量
-p 过滤的是 journal 记录的 PRIORITY 字段,不是文本里有没有 error 字样。服务通过 stdout 打日志时,级别由自身日志框架决定;直接写到 stderr 的内容通常按 err 归档,写 stdout 的内容常按 info 归档。
区间写法 -p 3..5 在较老的 systemd 上不支持,脚本里用之前先在本机验证一次,或者改成两条命令叠加。

易错点

  • 把优先级过滤当万能筛子:应用把错误打成 info 级别时 -p err 会漏掉关键线索,需要时先放开级别再按关键词过滤
  • 忽略级别是「及以上」语义:-p err 实际包含 emerg 到 err 四级,脚本里按单级理解会误判条目数
  • 忘记同时限定启动轮次或时间窗:不带 -b 或 --since 时会把所有历史轮次的日志一起拉出来,噪音很大
  • 长期开着 debug 级别日志:日志量会成倍增长并挤占磁盘,配合 journald 的 SystemMaxUse 才有安全边界

数据来源与参考

  • man 1 journalctl(-p)
  • man 5 systemd.journal-fields(PRIORITY)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌