Il modo standard per accedere da un programma C. è syslog.
Inizia includendo il file di intestazione:
#include <syslog.h>
Quindi all'inizio del programma, è necessario configurare syslog chiamando openlog:
openlog("programname", 0, LOG_USER);
Il primo argomento è l'identificazione o il tag, che viene aggiunto automaticamente all'inizio di ciascun messaggio. Inserisci qui il nome del tuo programma.
Il secondo argomento sono le opzioni che si desidera utilizzare o 0per il comportamento normale. L'elenco completo delle opzioni è disponibile man 3 syslog. Uno che potresti trovare utile è LOG_PID, che consente a syslog di registrare anche l'id del processo nel messaggio di registro.
Quindi, ogni volta che si desidera scrivere un messaggio di registro, si chiama syslog:
syslog(LOG_INFO, "%s", "Message");
Il primo argomento è la priorità. Le gamme di priorità da DEBUG(meno importante) a EMERG(solo per le emergenze) con DEBUG, INFOed ERRessendo il più comunemente usato. Vedi man 3 syslogper le tue opzioni.
Il secondo e il terzo argomento sono un formato e un messaggio, proprio come printf.
In quale file di registro appare questo dipende dalle impostazioni del tuo syslog.
Con un'impostazione predefinita, probabilmente entra /var/log/messages.
È possibile impostare un file di registro personalizzato utilizzando una delle funzionalità nell'intervallo LOG_LOCAL0a LOG_LOCAL7.
Li usi cambiando:
openlog("programname", 0, LOG_USER);
a
openlog("programname", 0, LOG_LOCAL0);
o
openlog("programname", 0, LOG_LOCAL1);
eccetera.
e aggiungendo una voce corrispondente a /etc/syslog.conf, ad es
local1.info /var/log/programname.log
e riavviare il server syslog, ad es
pkill -HUP syslogd
La .infoparte di local1.infosuddetti mezzi che tutti i messaggi che sono INFOo più importanti saranno connessi, compreso INFO, NOTICE, ERR(errore), CRIT(critico), ecc, ma non DEBUG.
In alternativa, puoi rsyslogprovare un filtro basato sulle proprietà , ad es
:syslogtag, isequal, "programname:" /var/log/programname.log
Il syslogtag dovrebbe contenere un ":".
Oppure, se stai pianificando di distribuire il tuo software ad altre persone, probabilmente non è una buona idea fare affidamento sull'uso LOG_LOCALo su un rsyslogfiltro.
In tal caso, è necessario utilizzare LOG_USER(se si tratta di un programma normale) o LOG_DAEMON(se si tratta di un server), scrivere i messaggi di avvio e i messaggi di errore utilizzando syslog, ma scrivere tutti i messaggi di registro in un file esterno syslog. Ad esempio, Apache HTTPd accede a /var/log/apache2/*o /var/log/httpd/*, presumo, usando regolari open/ fopene write/ printfchiamate.