我正在使用perror()打印错误消息,如:
pid = fork();
if (pid < 0) {
perror("couldn't fork");
exit(EXIT_FAILURE);
}
是否可以使用errno/perror()
设施,但将生成的消息直接发送到系统日志(/var/log/syslog
)?
我在程序的上下文中问这个问题,该程序可以在守护进程和非守护进程模式下运行。在守护程序模式下,perror()
消息不会出现在系统日志上。
使用strerror
根据错误代码获取错误消息,无需打印。然后像其他日志消息一样将其传递给syslog
:
syslog(LOG_ERR, "Couldn't fork: %s", strerror(errno));
最简单的方法是在调用程序时重定向stderr(可能还有stdout)。例如:./myprog 2>&1 | logger
。
假设您有写入syslog的正确权限,我不明白为什么您不能将输出管道传输到该文件。您也可以将fprintf与stderr一起使用,将错误结果输出到您创建的文件中。