[Linux] journalctl 读取系统日志并过滤输出
systemd 提供了自己的日志系统(logging system),称为 journal。使用 systemd 日志,无需额外安装日志服务(syslog)。使用 journalctl(1) 命令读取日志。
Arch Linux 中, /var/log/journal/
目录是 systemd 软件包的一部分。默认情况下 /etc/systemd/journald.conf
中的 Storage=
为 auto
,systemd 会将日志记录写入 /var/log/journal
。若被删除,systemd 不会自动创建此目录,而是将日志写入 /run/log/journal
,重启时内容会消失。如果 journald.conf
中的 Storage=persistent
, systemd-journald.service
重启 或系统重启时会重新创建 /var/log/journal/
。
journalctl
可以根据特定字段过滤输出。如果过滤的字段比较多,需要较长时间才能显示出来。
- 显示
PATTERN
模式的日志:
journalctl --grep=PATTERN
- 显示本次启动后的所有日志:
journalctl -b
journalctl -b -0
显示本次启动的日志
journalctl -b -1
显示上次启动的日志
journalctl -b -2
显示上上次启动的日志
journalctl --list-boots
显示重启日志列表
- 只显示错误、冲突和重要告警的日志
journalctl -p err..alert
也可以使用数字,
journalctl -p 3..1
。
如果使用单个数字/关键字,journalctl -p 3
, 则还包括所有更高优先级。
优先级:
0: emerg
;1: alert
;2: crit
;3: err
;4: warning
;5: notice
;6: info
;7: debug
。
- 包含日志类型的描述:
journalctl -x
注意:在报告 bug 和寻求帮助时不要使用此命令,因为这个命令会产生大量的输出。用
journalctl --list-catalog
可以查看所有类型的描述。
- 显示从某个日期(或时间)开始的日志:
journalctl --since="2012-10-30 18:17:16"
- 显示从某个时间(例如 20分钟前)的日志:
journalctl --since "20 min ago"
- 显示最新日志
journalctl -f
- 显示指定程序的所有日志:
journalctl /usr/lib/systemd/systemd
- 显示指定进程的所有日志:
journalctl _PID=1
- 显示指定 Unit 的所有日志:
journalctl -u man-db.service
- 显示指定 Unit 的来自用户服务的所有日志:
journalctl --user -u dbus
- 显示内核环缓存日志:
journalctl -k
- 通过对 syslog 工具进行过滤来显示 auth.log 等效项:
journalctl -f -l SYSLOG_FACILITY=10
- 如果日志目录(默认情况下位于
/var/log/journal
下)包含大量日志数据,则journalctl
可能需要几分钟的时间来过滤输出。可以使用--file
选项强制journalctl
仅查看最新的日志来显着加快速度:
journalctl --file /var/log/journal/*/system.journal -f
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
评论已关闭