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 0
per 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
, INFO
ed ERR
essendo il più comunemente usato. Vedi man 3 syslog
per 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_LOCAL0
a 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 .info
parte di local1.info
suddetti mezzi che tutti i messaggi che sono INFO
o più importanti saranno connessi, compreso INFO
, NOTICE
, ERR
(errore), CRIT
(critico), ecc, ma non DEBUG
.
In alternativa, puoi rsyslog
provare 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_LOCAL
o su un rsyslog
filtro.
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
/ fopen
e write
/ printf
chiamate.