我有一个可以在两种模式下运行的应用程序,或者使用 CLI,或者作为守护程序。
我syslog()
用于记录。但是,当在 CLI 模式下运行时,我希望将所有日志记录(除了那些标记为LOG_DEBUG
的消息)发送到控制台而不是记录。
我曾尝试使用setlogmask()
,但这似乎并没有重定向到控制台。
做这个的最好方式是什么?
正如 maverik 在评论中所建议的那样,我围绕 syslog 编写了一个包装器,用于确定是将输出发送到日志还是控制台。这是以防万一有人需要这个。
void mylog (int level, const char *format, ...)
{
va_list args;
va_start (args, format);
if (remote)
{
vsyslog(level, format, args);
}
else
{
if (level == LOG_DEBUG)
vsyslog(level, format, args);
else
vprintf(format, args);
}
va_end(args);
}
作为 GNU 特定的解决方案,我建议使用openlog(NULL, LOG_PERROR, your_facility)
. 不可定制(只是在标准错误上复制)。