是否可以将 perror() 生成的消息发送到 /var/log/syslog?

Is it possible to send the message produced by perror() to /var/log/syslog?

我正在使用 perror() 打印错误消息,例如:

pid = fork();
if (pid < 0) {
    perror("couldn't fork");
    exit(EXIT_FAILURE);
}

是否可以使用 errno/perror() 工具,但将生成的消息定向到系统日志 (/var/log/syslog)?

我在一个程序的上下文中问这个问题,该程序在守护程序和非守护程序模式下都可以是 运行。在守护进程模式下,perror() 消息不会出现在系统日志中。

最简单的方法是在调用程序时重定向 stderr(可能还有 stdout)。例如:./myprog 2>&1 | logger.

假设您有写入系统日志的正确权限,我不明白为什么您不能将输出传输到该文件。您还可以将 fprintf 与 stderr 一起使用,将错误结果输出到您创建的文件中。

使用strerror根据错误代码获取错误消息,而不打印它。然后像任何其他日志消息一样将其传递给 syslog

syslog(LOG_ERR, "Couldn't fork: %s", strerror(errno));