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

C 有没有办法将syslog消息重定向到stdout?,c,linux,syslog,C,Linux,Syslog,我有一个可以在两种模式下运行的应用程序,要么使用CLI,要么作为守护进程 我正在使用syslog()进行日志记录。但是,在CLI模式下运行时,我希望将所有日志记录(标记为LOG\u DEBUG的日志记录除外)消息发送到控制台,而不是日志记录 我曾尝试使用setlogmask(),但似乎无法重定向到控制台 最好的方法是什么?正如maverik在评论中所建议的,我在syslog周围编写了一个包装器,用于确定是将输出发送到日志还是控制台。这是以防任何人需要它 void mylog (int level

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

我正在使用
syslog()
进行日志记录。但是,在CLI模式下运行时,我希望将所有日志记录(标记为
LOG\u 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\u peror,您的工具)
。不可自定义(仅在stderr上复制)。

AFAIK,FreeBSD的syslog允许通过/etc/syslog.conf重定向。无论如何,这不是你想要的方式。我建议编写一个函数,该函数将检测您是否作为CLI应用程序或守护程序运行,并执行它应该执行的操作:写入控制台或syslog.Call
va_end(args)
,然后再从该函数返回。