2011-12-13 4 views
6
#include<syslog.h> 
syslog(LOG_INFO, "Start logging"); 

Il comando syslog sopra riportato non registra nel syslog. Così ho provato,Comando syslog in codice C

openlog("Logs", "", LOG_USER); 
syslog(LOG_INFO, "Start logging"); 
closelog(); 

Questo non riesce a registrare qualsiasi cosa e ottengo il seguente errore:

syslog: unknown facility/priority: 8049584 
+1

consultare http://www.linuxselfhelp.com/gnu/glibc/html_chapter/libc_18.html –

risposta

7

Si dovrebbe compilare con tutte le avvertenze abilitati e il debugging, vale a dire gcc -Wall -g.

Leggi di nuovo il openlog man page. Si è dichiarato come:

void openlog(const char *ident, int option, int facility); 

modo passando "" come il secondo argomento è sbagliato (e il compilatore ha fatto avvertire che circa). Dovrebbe essere ad es. LOG_PERROR|LOG_PID o alcune altre bandiere.

14

Questa linea è sbagliata:

openlog("vyatta-conntrack", "", LOG_USER); 

Il "" dovrebbe sono stati un numero intero:

void openlog(const char *ident, int option, int facility); 

Il numero intero dovrebbe essere una di queste costanti ORed insieme:

LOG_CONS  Write directly to system console if there is 
        an error while sending to system logger. 

    LOG_NDELAY  Open the connection immediately (normally, the 
        connection is opened when the first message is 
        logged). 

    LOG_NOWAIT  Don't wait for child processes that may have 
        been created while logging the message. (The 
        GNU C library does not create a child process, 
        so this option has no effect on Linux.) 

    LOG_ODELAY  The converse of LOG_NDELAY; opening of the 
        connection is delayed until syslog() is 
        called. (This is the default, and need not be 
        specified.) 

    LOG_PERROR  (Not in POSIX.1-2001.) Print to stderr as 
        well. 

    LOG_PID  Include PID with each message. 

Prova ancora con qualcosa di più simile:

openlog("vyatta-conntrack", LOG_PID, LOG_USER); 

Nota che la configurazione syslogd potrebbe non essere impostato in modo da conservare i messaggi di livello di log LOG_INFO. Prova a LOG_ALERT oa qualcosa per il debug di questo problema: se funziona, torna a LOG_INFO e configura il tuo syslogd per conservare i messaggi di log che vuoi conservare. L'aggiunta di una linea come:

*.* /var/log/all_messages.log 

farà il lavoro per rsyslogd(8). Assicurati di leggere la manpage rsyslog.conf(5) se il tuo sistema utilizza rsyslogd(8). Se il sistema utilizza un daemon syslog diverso, controllare le manpage del sistema per i dettagli.