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

Service 如何为systemd日志创建日志条目?,service,systemd,Service,Systemd,我有一个服务,我想让它在某些情况下为日志守护进程创建日志。到目前为止,我还没有找到任何关于如何这样做的说明 我是否误解了《代码》杂志的预期用途?或者我确实缺少了什么东西?如果您有服务,您可以将日志写入标准错误。在C++中,它甚至可以作为一个流名为“代码> STD::CLOG ”,它具有比“代码> STD::CURR :更多的“log”语义。它是一种日志机制,可与systemd、daemontools、daemontools encore、runit、s6、perp、nosh、freedt和其他工

我有一个
服务
,我想让它在某些情况下为
日志
守护进程创建日志。到目前为止,我还没有找到任何关于如何这样做的说明


我是否误解了《代码》杂志的预期用途?或者我确实缺少了什么东西?

如果您有服务,您可以将日志写入标准错误。在C++中,它甚至可以作为一个流名为“代码> STD::CLOG ”,它具有比“代码> STD::CURR :更多的“log”语义。它是一种日志机制,可与systemd、daemontools、daemontools encore、runit、s6、perp、nosh、freedt和其他工具配合使用

有一个用于写入systemd日志的API。但是,请确保您有充分的理由将软件和用户锁定到该API中。写入标准错误是一种机制,几乎在任何地方都有效。它很容易理解,管理员也很容易控制、调整和理解。这应该是第一选择

进一步阅读
  • Jonathan de Boyne Pollard(2015)。daemontools家族。经常给出答案
  • Jonathan de Boyne Pollard(2001年)。"". 设计Unix dæmon程序时要避免的错误。经常给出答案
  • 劳伦特·贝科特(2011)。s6日志程序。中六
  • 。Freedesktop.org
如果您需要此功能

#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;
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
sd_journal_send(“MESSAGE=Hello World!”,
“消息_ID=52fb62f99e2c49d89cfbf9d6de5e3555”,
“优先级=5”,
“HOME=%s”,getenv(“HOME”),
“期限=%s”,getenv(“期限”),
“页面大小=%li”,sysconf(\u SC\u页面大小),
“N_CPU=%li”,sysconf(仅限处理器),
无效);
返回0;
}
注意:使用
sd\u journal\u send
可以在
消息
之外向日志中添加其他字段,还可以对
优先级进行更精细的控制