是否可以将 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));
我正在使用 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));