9

我有一个可以在两种模式下运行的应用程序,或者使用 CLI,或者作为守护程序。

syslog()用于记录。但是,当在 CLI 模式下运行时,我希望将所有日志记录(除了那些标记为LOG_DEBUG的消息)发送到控制台而不是记录。

我曾尝试使用setlogmask(),但这似乎并没有重定向到控制台。

做这个的最好方式是什么?

4

2 回答 2

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);
}
于 2013-05-08T17:35:19.090 回答
3

作为 GNU 特定的解决方案,我建议使用openlog(NULL, LOG_PERROR, your_facility). 不可定制(只是在标准错误上复制)。

于 2013-05-08T17:42:01.927 回答