MasterDrive.it   
Vai indietro   MasterDrive.it > Software Development > C/C++ > C/C++ Tutorials & How-To



Rispondi
 
Strumenti della discussione Modalità di visualizzazione
Vecchio 02-11-2005, 17:25   #1 (permalink)
Esperto della community

 L'avatar di albertonissa

 
2,353 Messaggi

albertonissa e' una persona affidabile ( + 250 )albertonissa e' una persona affidabile ( + 250 )albertonissa e' una persona affidabile ( + 250 )
Loggare messaggi di errore

Spieghiamo come loggare tramite syslogd i messaggi di errore del nostro programma in un sistema GNU/Linux

Innanzi tutto, diciamo che il file header che ci serve e' <syslog.h>.

In questo header, troveremo tre funzioni: openlog, syslog e closelog. Sufficienti spiegazioni (senza esempi) si trovano nella manpage:

codice:
man 3 syslog
Ecco una implementazione di queste funzioni: prima vediamo il codice e poi commentiamolo.

codice:
#include <syslog.h>
 
int main(void) {
  openlog("fake kernel", LOG_PERROR, LOG_KERN);
  syslog(LOG_CRIT, "Questo e' un falso errore del falso kernel");
  closelog();
}
Come potete vedere, abbiamo incluso l'header di cui sopra. Poi, nella main, abbiamo subito usato la funzione openlog. Questa funzione serve per aprire il log di sistema e accetta tre parametri:

- il primo e' un const char* e contiene la stringa che sara' messa nel messaggio di errore... ad esempio in una riga di syslog come questa:

codice:
Dec 27 10:49:57 spacelab kernel: CPU: Intel Pentium III (Coppermine) stepping 0a
la nostra stringa e' "kernel";

- il secondo parametro e' un intero, di cui nell'header sono definite varie costanti. Queste sono: LOG_CONS che specifica di scrivere sulla console gli eventuali errori riscontrati con il logger di sistema; LOG_NDELAY che forza l'apertura della connessione al logger prima ancora che il primo messaggio sia mandato; LOG_NOWAIT e' un parametro che non ci interessa, in quanto le libc di Linux non creano processi-figlio); LOG_ODELAY e' usata di default e indica che la connessione con il logger sia stabilita nonappena il primo messaggio debba essere mandato; LOG_PERROR indica che il messaggio di errore dev'essere stampato anche sulla stderr; LOG_PID specifica se includere o meno il PID del processo nel messaggio di errore;

- il terzo parametro e' anch'esso un intero che specifica il tipo di errore che invieremo. Nel nostro caso abbiamo usato LOG_KERN per indicare che e' un log del Kernel.. altri potrebbero essere LOG_FTP, LOG_LPR, LOG_MAIL o, semplicemente LOG_SYSLOG (per una lista completa si veda la manpage di cui sopra);

Dopo la openlog, abbiamo usato la funzione syslog, che invia il messaggio del log. Questa si comporta esattamente come la printf(), ad eccezione del fatto che ammette un primo parametro aggiuntivo: un intero che specifica il livello di gravita' del messaggio: LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING, LOG_NOTICE, LOG_INFO, LOG_DEBUG.

In ultimo abbiamo usato la funzione (opzionale) closelog che non ha bisogno di alcun parametro e chiude la connessione con il logger di sistema.


Ultima modifica di Master85 : 03-11-2005 a 16:08.
albertonissa non è in linea   Bookmark and Share Rispondi quotando
Rispondi

Strumenti della discussione
Modalità di visualizzazione

Regole d'invio
Non puoi inserire discussioni
Non puoi inserire repliche
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è attivo
Le smilies sono attive
Il codice IMG è attivo
il codice HTML è disattivato
Trackbacks are attivo
Pingbacks are attivo
Refbacks are disattivato

Salto del forum

Discussioni simili
Discussione Ha iniziato questa discussione Forum Risposte Ultimo messaggio
[VBA] Gestione degli errori dragone bianco VBA Tutorials & How-To 1 18-09-2008 17:38
PHP 4.x: Realizzare un Guestbook Skull86 PHP Tutorials & How-To 0 21-11-2005 18:45
Errore "Server, ASP 0177 (0x800401F3)" raffaelke ASP 3.0, ASP .Net 1 30-09-2005 14:05
[Win32] Problema con UpdateWindow lucagalbu C/C++ 17 20-06-2005 00:45


Tutti gli orari sono GMT +2. Attualmente sono le 09:50.


Powered by vBulletin versione 3.8.0
Copyright © 2000 - 2010, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO 3.2.0

Valid XHTML 1.0 Transitional  Creative Commons License

Eccetto dove diversamente specificato, i contenuti pubblicati in questa comunità sono rilasciati sotto Licenza
Creative Commons Attribuzione-Non commerciale-Condividi allo stesso modo 2.5 Italia License.
La comunita' di MasterDrive.it non e' responsabile di eventuali imprecisioni presenti nelle pagine.