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=persistentsystemd-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