如何为 systemd 日志创建日志条目?
How do I create a log entry for the systemd journal?
我有一个 service
,我想让它在某些情况下为 journald
守护程序创建日志。到目前为止,我还没有找到任何关于如何操作的说明。
我是否误解了 journal
的预期用途?还是我确实遗漏了什么?
如果您有服务,您将您的日志写入标准错误。 (它甚至可以用作 C++ 中名为 std::clog
的流,比 std::cerr
具有更多 "log-like" 语义。)就是这样。它是一种与 systemd、daemontools、daemontools-encore、runit、s6、perp、nosh、freedt 等一起使用的日志记录机制。
有一个 API 用于写入 systemd 日志。但是,请确保您有充分的理由将您的软件和用户锁定到 API。写入标准错误是一种行之有效的机制,几乎无处不在。它很好理解,管理员也很容易控制、调整和理解。应该是首选。
进一步阅读
- 乔纳森·德博因·波拉德 (2015)。 "Logging"。 daemontools 系列。经常给出的答案。
- 乔纳森·德博因·波拉德 (2001)。 “Don't use `syslog().”。 设计 Unix 守护程序时要避免的错误。经常给出的答案。
- 洛朗·贝尔科特 (2011)。 "The Logging Chain" s6-log 程序。 s6.
- sd-journal。 Freedesktop.org.
- https://superuser.com/a/868519/38062
- What is the difference between cout, cerr, clog of iostream header in c++? When to use which one?
Lennart Poettering's blog shows how this is done 与 API 如果你想要这个功能,
#include <systemd/sd-journal.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
sd_journal_send("MESSAGE=Hello World!",
"MESSAGE_ID=52fb62f99e2c49d89cfbf9d6de5e3555",
"PRIORITY=5",
"HOME=%s", getenv("HOME"),
"TERM=%s", getenv("TERM"),
"PAGE_SIZE=%li", sysconf(_SC_PAGESIZE),
"N_CPUS=%li", sysconf(_SC_NPROCESSORS_ONLN),
NULL);
return 0;
}
请注意,使用 sd_journal_send
允许您向日志添加额外的字段,而不仅仅是 MESSAGE
,并且它允许您更精细地控制 PRIORITY
。
我有一个 service
,我想让它在某些情况下为 journald
守护程序创建日志。到目前为止,我还没有找到任何关于如何操作的说明。
我是否误解了 journal
的预期用途?还是我确实遗漏了什么?
如果您有服务,您将您的日志写入标准错误。 (它甚至可以用作 C++ 中名为 std::clog
的流,比 std::cerr
具有更多 "log-like" 语义。)就是这样。它是一种与 systemd、daemontools、daemontools-encore、runit、s6、perp、nosh、freedt 等一起使用的日志记录机制。
有一个 API 用于写入 systemd 日志。但是,请确保您有充分的理由将您的软件和用户锁定到 API。写入标准错误是一种行之有效的机制,几乎无处不在。它很好理解,管理员也很容易控制、调整和理解。应该是首选。
进一步阅读
- 乔纳森·德博因·波拉德 (2015)。 "Logging"。 daemontools 系列。经常给出的答案。
- 乔纳森·德博因·波拉德 (2001)。 “Don't use `syslog().”。 设计 Unix 守护程序时要避免的错误。经常给出的答案。
- 洛朗·贝尔科特 (2011)。 "The Logging Chain" s6-log 程序。 s6.
- sd-journal。 Freedesktop.org.
- https://superuser.com/a/868519/38062
- What is the difference between cout, cerr, clog of iostream header in c++? When to use which one?
Lennart Poettering's blog shows how this is done 与 API 如果你想要这个功能,
#include <systemd/sd-journal.h>
#include <unistd.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
sd_journal_send("MESSAGE=Hello World!",
"MESSAGE_ID=52fb62f99e2c49d89cfbf9d6de5e3555",
"PRIORITY=5",
"HOME=%s", getenv("HOME"),
"TERM=%s", getenv("TERM"),
"PAGE_SIZE=%li", sysconf(_SC_PAGESIZE),
"N_CPUS=%li", sysconf(_SC_NPROCESSORS_ONLN),
NULL);
return 0;
}
请注意,使用 sd_journal_send
允许您向日志添加额外的字段,而不仅仅是 MESSAGE
,并且它允许您更精细地控制 PRIORITY
。