2013-05-08 23 views
8

İki modda, CLI veya daemon olarak çalışabilen bir uygulamam var.Syslog mesajlarını stdout'a yönlendirmenin bir yolu var mı?

Günlüğe kaydetme için syslog() kullanıyorum. Ancak, CLI modunda çalıştırıldığında, LOG_DEBUG olarak işaretlenenler dışındaki tüm günlüğe kaydetmeyi, iletilerin yerine oturuma gönderilmesini istiyorum.

setlogmask() kullanmayı denedim, ancak bu konsol için yeniden yönlendiriyor gibi görünmüyor.

Bunu yapmanın en iyi yolu nedir?

+2

AFAIK, FreeBSD'nin syslog'u /etc/syslog.conf dosyasında yeniden yönlendirmeye izin verir. Her neyse, aradığın bir yol değil. CLI uygulaması veya daemon olarak çalıştırıp çalıştırmadığınızı algılayacak bir işlev yazmanızı öneririm ve yapması gerekenleri yapar: konsola veya syslog'a yazar. – maverik

cevap

4

Maverik tarafından yapılan yorumlarda önerildiği gibi, çıktıyı günlüğe veya konsola gönderilip gönderilmeyeceğini belirleyen syslog etrafında bir sarıcı yazdım. Burada birinin buna ihtiyacı var.

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

İşlevden dönmeden önce 'va_end (args)' öğesini çağırın. – jxh

1

GNU'ya özel çözüm olarak openlog(NULL, LOG_PERROR, your_facility)'u kullanmanızı öneririm. Özelleştirilemez (sadece stderr'de çoğaltılır).