2013-05-08 21 views
8

Mam aplikację, która może działać w dwóch trybach, albo z CLI, albo jako demon.Czy istnieje sposób przekierowania wiadomości syslog na standardowe wyjście?

Do rejestrowania używam syslog(). Jednak po uruchomieniu w trybie CLI chciałbym, aby wszystkie dzienniki, z wyjątkiem tych oznaczonych jako LOG_DEBUG, były wysyłane do konsoli zamiast rejestrowane.

Próbowałem użyć setlogmask(), ale to nie wydaje się przekierować do konsoli.

Jaki jest najlepszy sposób na zrobienie tego?

+2

AFAIK, syslog FreeBSD umożliwia przekierowanie poprzez /etc/syslog.conf. W każdym razie nie jest to sposób, którego szukasz. Proponuję napisać funkcję, która wykryje, czy używasz aplikacji lub demona CLI i robi to, co powinna: napisz do konsoli lub do syslog. – maverik

Odpowiedz

4

Jak zasugerowałem w komentarzach maverika, napisałem wrapper wokół syslog, który określa, czy wysłać dane wyjściowe do dziennika lub konsoli. Oto na wypadek, gdyby ktoś tego potrzebował.

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

Wywołanie 'va_end (args)' przed powrotem z funkcji. – jxh

1

Jako rozwiązanie specyficzne dla GNU sugerowałbym użycie openlog(NULL, LOG_PERROR, your_facility). Nie można go dostosowywać (po prostu duplikuj na stderr).

Powiązane problemy