在较旧的 Linux 系统中,该logger
命令可用于向 syslog 发送日志消息。
阅读Arch Linux 中将其消息记录到哪里?logger
,如果设置了用于消息转发的套接字syslog
,消息和logger
命令行应用程序似乎只与systemd
日志对话。
那么logger
命令的现代等价物是什么?如何从命令行直接向 systemd 日志发送消息?
在较旧的 Linux 系统中,该logger
命令可用于向 syslog 发送日志消息。
阅读Arch Linux 中将其消息记录到哪里?logger
,如果设置了用于消息转发的套接字syslog
,消息和logger
命令行应用程序似乎只与systemd
日志对话。
那么logger
命令的现代等价物是什么?如何从命令行直接向 systemd 日志发送消息?
systemd-cat
相当于记录器:在另一个终端中,运行
journalctl -f
:优先级仅由字符串的一部分指定:
警告是粗体的,紧急情况是粗体和红色的。可怕的东西。
您还可以使用任意的“标识符”来指定应用程序名称。这些就像 syslog 的旧设施,但您不会被古老的东西所束缚,
lpr
uucp
nntp
例如.local0
local7
记录为:
由于问题提到了 Arch Linux(从第一天开始由 systemd 控制)和日志记录,我会冒险猜测它与来自 systemd 服务的日志记录有关。这是从 systemd 服务单元调用的shell 脚本的另一种日志记录技术。systemd 可以(并且默认情况下)设置为侦听服务的进程 stderr 和/或 stdout,并将消息转发到日志。当消息以 3 个字符的前缀开头时,其中N是从 0 到 7 的数字,systemd 将其解释为日志级别,忽略它,并在指定级别记录字符串的其余部分。
'<' N '>'
这很方便,因为来自任何命令的任何 stderr 消息都将自动记录在错误级别。另一个 fd 保留用于以任意不同的严重性进行日志记录。
这当然适用于所有程序,而不仅仅是 shell 脚本。
例子
取自真实服务脚本的shell 脚本(在本例中为 Bash,依赖于进程替换和行为) :
trap ... EXIT
ExecStartPre
单元文件中的设置一般不需要特别设置。stderr logging 开箱即用,除非在systemd-system.conf (5) 或journald.conf (5) 中全局覆盖。默认值为:
请注意,systemd 重定向所有使用设置调用的命令
Exec*
,不仅是主服务进程ExecStart
,还有ExecStartPre
,ExecStartPost
等。要运行该示例,请将上述脚本另存为
logging-test.sh
,使用 systemd-run 作为临时单元运行,然后查询每个日志记录的完整属性。如果您没有看到信息级别消息,请检查 journald.conf 是否将日志中存储的日志级别限制为更高的值。日志级别在sd-daemon (3)中定义:
参考
systemd.conf
为 ,此处命名为手册页)。