我使用的是 Ubuntu 16.04,在分析 journalctl 日志时看到了一些奇怪的行为。
这是未过滤的输出(我使用 json 输出希望包括所有相关字段):
$ journalctl -o json-pretty --since "2018-01-11 12:00:00" --until "2018-01-11 12:00:05"
{
"__CURSOR" : "s=bac060082d1c447a972958f176cdcec7;i=1d2a2e;b=a948062f9f0b4091ae299c0523a99111;m=337bc483bf3;t=5627c5f8a3bae;x=7fd2518d6b70b9d",
"__REALTIME_TIMESTAMP" : "1515661201914798",
"__MONOTONIC_TIMESTAMP" : "3537916935155",
"_BOOT_ID" : "a948062f9f0b4091ae299c0523a99111",
"_TRANSPORT" : "stdout",
"PRIORITY" : "6",
"SYSLOG_FACILITY" : "3",
"SYSLOG_IDENTIFIER" : "start.sh",
"_PID" : "6474",
"_UID" : "1000",
"_GID" : "1000",
"_COMM" : "start.sh",
"_EXE" : "/bin/bash",
"_CMDLINE" : "/bin/bash /usr/local/malibu/start.sh",
"_CAP_EFFECTIVE" : "0",
"_SYSTEMD_CGROUP" : "/system.slice/malibu.service",
"_SYSTEMD_UNIT" : "malibu.service",
"_SYSTEMD_SLICE" : "system.slice",
"_MACHINE_ID" : "f03ff2ad269ea529c82323dd57f29b00",
"_HOSTNAME" : "terminal",
"MESSAGE" : "2018-01-11 12:00:01.914 DEBUG: malibu.devices.validator.ValidatorPortService$ - health check succeeded"
}
如您所见,输出包含一条日志消息。
但是,如果我按单位名称 ( -u malibu.service
) 添加过滤器,则此消息会消失:
$ journalctl -u malibu.service -o json-pretty --since "2018-01-11 12:00:00" --until "2018-01-11 12:00:05"
单位名称_SYSTEMD_UNIT
与未过滤输出中的字段完全相同。为什么 journalctl 在过滤后的版本中不显示?
编辑:原来我使用的是旧版本的 systemd - 229,而最新的是 236,并且使用较新的 journalctl 解决了这个问题。不幸的是,229 是 16.04 LTS 的最新可用 systemd 版本,因此我看不到解决该问题的合理解决方法(除了在用户空间中构建最新的 systemd 并直接使用新构建的 journalctl 二进制文件)。
原来我使用的是旧版本的 systemd - 229,而最新版本是 236,使用更新的 journalctl 解决了这个问题。不幸的是,229 是 16.04 LTS 的最新可用 systemd 版本,因此我看不到解决该问题的合理解决方法(除了在用户空间中构建最新的 systemd 并直接使用新构建的 journalctl 二进制文件)。