我有一个可以在两种模式下运行的应用程序,可以使用CLI,也可以作为守护进程运行。
我正在使用syslog()
进行日志记录。但是,在CLI模式下运行时,我希望所有日志记录(标记为LOG_DEBUG
的日志除外)都将消息发送到控制台而不是记录。
我尝试使用setlogmask()
,但似乎没有重定向到控制台。
这样做的最佳方式是什么?
答案 0 :(得分:4)
正如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);
}
答案 1 :(得分:2)
作为GNU特定的解决方案,我建议使用openlog(NULL, LOG_PERROR, your_facility)
。不可自定义(仅在stderr上重复)。