2013-05-08 12 views
8

Possiedo un'applicazione che può essere eseguita in due modalità, con una CLI o come un demone.C'è un modo per reindirizzare i messaggi di syslog su stdout?

Sto utilizzando syslog() per la registrazione. Tuttavia, quando si esegue in modalità CLI mi piacerebbe tutto il logging, ad eccezione di quelli contrassegnati LOG_DEBUG, i messaggi da inviare alla console invece di loggati.

Ho provato a utilizzare setlogmask(), ma non sembra reindirizzare alla console.

Qual è il modo migliore per farlo?

+2

AFAIK, syslog di FreeBSD consente il reindirizzamento tramite /etc/syslog.conf. Ad ogni modo, non è un modo che stai cercando. Suggerisco di scrivere una funzione che rilevi se si sta eseguendo come app o demone CLI e fa ciò che dovrebbe: scrivere su console o su syslog. – maverik

risposta

4

Come suggerito nei commenti di maverik, ho scritto un wrapper su syslog che determina se inviare l'output al log o alla console. Qui è nel caso qualcuno abbia mai bisogno di questo.

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

Chiama 'va_end (args)' prima di tornare dalla funzione. – jxh

1

Come soluzione specifica per GNU, suggerirei di utilizzare openlog(NULL, LOG_PERROR, your_facility). Non personalizzabile (basta duplicare su stderr).