[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 国际许可协议 进行许可。
疯狂的青蛙
评论已关闭