Brandon Yates
Brandon Yates

Reputation: 2052

Is there a way to redirect syslog messages to stdout?

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?

Upvotes: 10

Views: 5268

Answers (2)

Brandon Yates
Brandon Yates

Reputation: 2052

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);
}

Upvotes: 4

KAction
KAction

Reputation: 2017

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

Upvotes: 4

Related Questions