Is there a way to redirect syslog messages to stdo

2019-02-16 21:08发布

I have an application that can run in two modes, either with a CLI, or as a daemon.

I am using syslog() for logging. However, when run in CLI mode I'd like all the logging, except those marked LOG_DEBUG, messages to be sent to the console instead of logged.

I have tried to use setlogmask(), but that doesn't seem to redirect to console.

What is the best way to do this?

标签: c linux syslog
2条回答
Juvenile、少年°
2楼-- · 2019-02-16 21:49

As suggested in the comments by maverik, I wrote a wrapper around syslog that determines whether to send the output to the log or console. Here it is in case anyone ever needs this.

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);
}
查看更多
爱情/是我丢掉的垃圾
3楼-- · 2019-02-16 21:51

As GNU-specific solution I would suggest using openlog(NULL, LOG_PERROR, your_facility). Not customizable(just duplicate on stderr).

查看更多
登录 后发表回答