Newsgroup: it.comp.os.linux.development
Titolo: Gestione debug, log ed errori in c

Salve NG,
Devo fare un programma tipo client/server con annesso utilizzo delle ncurses
per l'interfaccia utente. Essendo abbastanza grosso (per me) mi sono
trovato a dover affrontare il problema di log ed errori. Volevo fare
qualcosa di piu' serio che usare la solita printf e poter gestire diversi
livelli di log/debug.
La mia idea e' di usare delle macro nella quale c'e' la fprintf che spedisce
la roba in file passato da riga di comando (o dal file di configurazione
dove imposto anche il livello di debug). Quando nel programma devo
registrare qualcosa metto nei parametri della macro un numero che
identifica il livello di debug. Se il numero e' piu' basso di quello che ho
impostato allora la macro chiama la fprintf.
Dubbi:
1) Devo gestire allo stesso modo errori (tipo errore da una chiamata a
fopen) e log/debug (tipo "Ti informo che ho inviato i dati alla seriale")?
2) Qual'e' la differenza tra log e debug? Forse i log sono una cosa che
interessa a chi usa il programma e i messaggi di debag interessano solo al
programmatore? Ha senso gestirli entrambi utilizzando la macro di cui sopra
e separarli semplicemente usando un diverso livello di debug?
3) E' possibile (e serve a qualcosa) redirigere stderr e stdout all'interno
del programma? Nel senso che invece che usare fprintf(mioFILE, ecc.), usare
invece fprintf(stdout, ecc.) dopo avere rediretto stdout su miofile.
Grazie, Nicola.
-- 
chi va pian va san e va lontan

 invece fprintf(stdout, ecc.) dopo avere rediretto stdout su miofile.
stdout e' buffered quindi non ti conviene, al limite con stderr puo' 
aver senso, ma per piccole applicazioni. Quando un'applicazione viene 
eseguita a lungo (e un server e' online sempre) e' sempre meglio 
utilizzare un meccanismo di logging piu' sofisticato e flessibile.
Tra l'altro se fai un server potrebbe servirti staccarti dalla shell con 
daemon() o fork(), e' molto piu' elegante avere un programma che si 
lancia cosi':
/sbin/mioserver
che cosi':
/sbin/mioserver 2>>/var/log/pippo.log &
Bye,
  Gabry

 lancia cosi':
cut...
Ok, niente redirezione.


 separato :(((((
Prova syslog-ng: permette di definire il log anche per programma oltre
che per facility
-- 
Roberto Tagliaferri<-> r.tagliaferri@(forse)
tosnet.it
	Il paese da dove veniva non era un paese di geni.
	Loro lo chiamavano computer umano perchč sapeva contare fino a 20.
	Nudo fino a 21

 che per facility
Ah, questo e' interessante, ma ha il difetto che non c'e' ancora nelle
distribuzioni. Difficile quindi installare il mio programma con un semplice
make install. Temo che finiro' per usare local, magari impostabile da riga
di comando o file (magari con un controllo che verifica se esiste nel file
/etc/syslog.conf una voce local).
P.S. sempre sperando che redhat non si mangi tutti i posti liberi local :P


 distribuzioni.
bianco ~ $> apt-cache search syslog-ng
[...]
syslog-ng - Next generation logging daemon
deb 1 - rh 0 ;-)
-- 
 Ciao, Bianco.                         Reply to luca.bianco (at) 
tiscali.it
|--------[Powered by Debian GNU/Linux Sarge - 2.4.19 - AMD K6-200]--------|
|------------[Linux Registered User #287769 - Machine #169192]------------|

 deb 1 - rh 0 ;-)
Ok, ma io sono un poltrone, uso debian solo sul vecchio portatile (dove rh e
mdk non fungono). Redhat e' pronta all'uso, debian no :P


 invece fprintf(stdout, ecc.) dopo avere rediretto stdout su miofile.
Qui non ho capito.
Cmq, se non vuoi usare il syslog puoi usare le facility messe a disposizione
da varie librerie. Per es. mi viene in mente la glib.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
-<! Computer programmers never die, they just raise an unhandled exception.!>-