GNU/Linux >> Linux Esercitazione >  >> Linux

creare un file di registro

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.


Linux
  1. Qual è un modo conveniente per controllare cosa viene aggiunto a un file di registro in tempo reale?

  2. Trova il file di registro di Firefox?

  3. Servizio del sistema operativo Linux "syslog"

  4. Come fare in modo che ssh acceda come l'utente giusto?

  5. Trova quale processo sta modificando un file

Come rendere eseguibile un file in Linux

Configurazione di logrotate in Linux

Rotazione del file di registro

Linux make Command con esempi

Come faccio a rendere un file NON modificabile?

cp -L contro cp -H