2013-10-02 14 views
6

Sto provando a scrivere diversi tipi di voci in file di registro separati da un'applicazione. Per motivi che sto cercando di scoprire, tutte le voci appaiono in tutti i file di registro. Cosa potrei fare di sbagliato?Scrittura in file di registro separati

Voglio che solo le voci critiche vadano in /tmp/log/critical.log e le voci di debug per andare nel file /tmp/log/debug.log mentre tutte le enteries possono andare in /tmp/log/all.log log file.

seguito sono voci nel file di /etc/rsyslog.conf

local0.*            /tmp/log/all.log 
local0.alert           /tmp/log/alert.log 
local0.crit            /tmp/log/critical.log 
local0.debug           /tmp/log/debug.log 
local0.emerg           /tmp/log/emergency.log 
local0.err            /tmp/log/error.log 
local0.info            /tmp/log/info.log 
local0.notice           /tmp/log/notice.log 
local0.warning           /tmp/log/warning.log 

mio campione c programma di scrittura voci syslog ...

#include<syslog.h> 

main() 
{ 
    openlog("myapp",LOG_CONS|LOG_PID|LOG_NDELAY,LOG_LOCAL0); 

    syslog(LOG_EMERG|LOG_LOCAL0,"Emergency",getuid()); 
    syslog(LOG_ALERT|LOG_LOCAL0,"Alert",getuid()); 
    syslog(LOG_CRIT|LOG_LOCAL0,"Critical",getuid()); 
    syslog(LOG_ERR|LOG_LOCAL0,"Error",getuid()); 
    syslog(LOG_WARNING|LOG_LOCAL0,"Warning",getuid()); 
    syslog(LOG_NOTICE|LOG_LOCAL0,"Notice",getuid()); 
    syslog(LOG_INFO|LOG_LOCAL0,"Information",getuid()); 
    syslog(LOG_DEBUG|LOG_LOCAL0,"Debug",getuid()); 

    closelog(); 
} 

risposta

3

La chiave qui è che (come probabilmente avete indovinato) l'impostazione predefinita è di accedere al livello che hai scelto e quelli sottostanti. È possibile modificarlo nel file di configurazione syslog modificando il confronto del selettore. Il valore di default se non specificato è >=, si vuole =:

local0.*             /tmp/log/all.log 
local0.=alert           /tmp/log/alert.log 
local0.=crit            /tmp/log/critical.log 
local0.=debug           /tmp/log/debug.log 
local0.=emerg           /tmp/log/emergency.log 
local0.=err            /tmp/log/error.log 
local0.=info            /tmp/log/info.log 
local0.=notice           /tmp/log/notice.log 
local0.=warning           /tmp/log/warning.log 

Così come <, >, <=, >=, si può negare il confronto con !.

+1

Ciao, puoi condividere il file di configurazione? – ams

+0

Quale file di configurazione? Le voci che ci sono da inserire nella tua configurazione di syslog. Ho il mio in /etc/rsyslog.d/90-local.conf – ralight

Problemi correlati