有没有办法将syslog消息重定向到stdout?

时间:2013-05-08 16:54:27

标签: c linux syslog

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

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

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

这样做的最佳方式是什么?

2 个答案:

答案 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上重复)。