Il modo standard per accedere da un programma C è syslog .
Inizia includendo il file di intestazione:
#include <syslog.h>
Quindi, all'inizio del tuo programma, dovresti configurare syslog chiamando openlog :
openlog("programname", 0, LOG_USER);
Il primo argomento è l'identificativo o il tag, che viene aggiunto automaticamente all'inizio di ogni messaggio. Inserisci qui il nome del tuo programma.
Il secondo argomento sono le opzioni che vuoi usare, o 0 per il comportamento normale. L'elenco completo delle opzioni è in man 3 syslog . Uno che potresti trovare utile è LOG_PID , che fa in modo che syslog registri anche l'id del processo nel messaggio di log.
Quindi, ogni volta che vuoi scrivere un messaggio di log, chiami syslog :
syslog(LOG_INFO, "%s", "Message");
Il primo argomento è la priorità. La priorità va da DEBUG (meno importante) a EMERG (solo per emergenze) con DEBUG , INFO e 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.
Il file di log in cui appare dipende dalle impostazioni del tuo syslog.
Con una configurazione predefinita, probabilmente va in /var/log/messages .
Puoi 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);
ecc.
e aggiungendo una voce corrispondente a /etc/syslog.conf , ad esempio
local1.info /var/log/programname.log
e riavviare il server syslog, ad es.
pkill -HUP syslogd
Il .info parte di local1.info sopra significa che tutti i messaggi che sono INFO o più importanti verranno registrati, incluso INFO , NOTICE , ERR (errore), CRIT (critico), ecc., ma non DEBUG .
Oppure, se hai rsyslog , potresti provare un filtro basato sulla proprietà, ad esempio
:syslogtag, isequal, "programname:" /var/log/programname.log
Il tag syslog dovrebbe contenere un ":".
Oppure, se hai intenzione di distribuire il tuo software ad altre persone, probabilmente non è una buona idea fare affidamento sull'utilizzo di LOG_LOCAL o un rsyslog filtro.
In tal caso, dovresti usare LOG_USER (se è un programma normale) o LOG_DAEMON (se è un server), scrivi i tuoi messaggi di avvio e di errore usando syslog , ma scrivi tutti i tuoi messaggi di log in un file al di fuori di syslog . Ad esempio, Apache HTTPd accede a /var/log/apache2/* o /var/log/httpd/* , presumo di usare il normale open /fopen e write /printf chiamate.
Ti consigliamo di #include <syslog.h> , quindi utilizza syslog() funzioni per inviare dati a qualunque programma di registrazione del sistema sia attivo.
Vedi la pagina man qui.