如何为systemd Journal创建日志条目?

时间:2015-06-19 17:55:41

标签: service systemd

我有@Override public void onBackPressed() { // Save the data to whatever you would like (database, variable, etc.) finish(); } ,我希望在某些情况下让它为service守护程序创建日志。到目前为止,我还没有找到任何关于如何操作的说明。

我是否误解了journald的预期用途?或者是我遗失的事情真的很明显吗?

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

如果您有服务,则将您的日志写入标准错误。 (它甚至可以作为C ++中名为std::clog的流使用,具有比std::cerr更多的“类似日志”的语义。)就是这样。它是一种日志机制,适用于systemd,daemontools,daemontools-encore,runit,s6,perp,nosh,freedt等。

有一个用于写入systemd日志的API。但是,请确保您有充分的理由将软件和用户锁定到该API。写入标准错误是一种适用的机制,几乎无处不在。管理员可以很好地理解和轻松控制,调整和理解。它应该是第一选择。

进一步阅读

答案 1 :(得分:1)

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进行更精细的粒度控制。