Newsgroup: it.comp.lang.visual-basic
Titolo: Debug.Print e file di log

Salve a tutti,
Come posso fare per fare in modo che le chiamate a Debug.Print inviino il 
messaggio sia alla finestra di visualstudio "output" sia a un file di log 
(ad es: miolog.log) ?
Bye,
-- 
Carmine ( 
pikachu...@gmail.com
 (Togli la scritta NOSPAM) )
Webmaster di The Total Site 4 : 
http://www.thetotalsite.it
MariokartDS Codice Amico: 532639027909 - CarmineC in MarioKartDS
"Un problema non è un problema se può essere risolto" 

 
Debug.print stampa quello che tu hai deciso di stampare.
Quindi puoi farlo anche con un normalissimo Open ... for Append
bye

 Quindi puoi farlo anche con un normalissimo Open ... for Append
Ma sarebbe più scomodo...
E poi quando tolgo la costante DEBUG vs2005 non compila le istruzioni 
Debug.*


 Ma sarebbe più scomodo...
Pigro >:-[
Per stavolta ti dò un po' di pappa pronta, giusto perché avevo VB5
aperto proprio su questa roba. Se ti serve per .NET, vedi tu, ma
il concetto è semplice.
Al posto di Debug.Print <msg> basta usare AddLog <msg>
e verrà sia stampato nella debug window che sul file di log.
'**********************
Sub AddLog(RigaDiLog As String)
    On Error GoTo problema
    Debug.Print RigaDiLog
    Dim libero As Integer
    Dim Giorno As String, Orario As String
    Giorno = Format$(Now, "dd-mm-yyyy ")
    Orario = Format$(Now, "hh:mm:ss - ")
    libero = FreeFile
    Open DirTemp & Giorno & " log.txt" For Append As #libero
    Print #libero, Orario & RigaDiLog
    Close libero
    Exit Sub
problema:
    AddLog " Errore " & Err.Number & "  " & Err.Description & vbCrLf & _
    "nella routine AddLog, testo: " & RigaDiLog
    Err.Clear
    Resume Next
End Sub
'**********************
Bye, G.

Uh è vero !!!
Quindi poi nella relase stamperà solo sul file di log.
Perfetto grazie.


 '**********************
Mi lascia _molto_ perplesso l'uso ricorsivo della routine in caso di errore.
Poni caso che il file indicato da DirTemp & pappardella non sia raggiungibile
o apribile...
A mio modesto parere se fallisce la routine di log, al massimo puoi mettere
una message box (qualora il programma sia front-end) o appoggiarti ad
un'altra routine (in caso di estrema necessita') ma chiamare la routine stessa
puo' innescare a un loop infinito.
Attenzione alla formattazione dell'ora. I minuti si indicano con Nn e non
con mm.
L'istruzione Close #libero dovrebbe trovarsi anche nel blocco di gestione
degli errori (per intenderci dopo l'etichetta "problema:"), infatti se
l'errore venisse scatenato dall'istruzione Print ... il file rimarrebbe aperto.
AFAIK Err.Clear, e' ridondante, in quanto il cleanup viene fatto dal gestore
degli errori stesso quando ne esci (ma qui posso essere smentito :P).
Tanto per parlare, poi, io utilizzerei il giorno in formato yyyy-mm-dd o
affine che permette un sort facile per data.
Infine, piuttosto che spazi come separatori, userei tabulazioni o caratteri
particolari e non andrei _mai_ a capo nella stessa riga di errore, cosi' da
poter gestire con facilita' l'eventuale "smazzamento" del file con un editor
piu' potente, o un'eventuale importazione in altri formati.
La mia versione:
'**********************
Public Sub AddLog(RigaDiLog As String)
    On Error GoTo EH_AddLog
    Dim fn As Integer
    Debug.Print RigaDiLog
    fn = FreeFile
    Open DirTemp & Format$(Now, "yyyymmdd") & "_log.txt" For Append As #fn
    Print #fn, Format$(Now, "HhNnSs") & vbTab & RigaDiLog
EH_AddLog:
    Close #fn
 End Sub
'**********************
Just my 2 eurocent.
Lokar

 Just my 2 eurocent.
Anche di piů direi. In particolare quella storia della "close" mi sta molto
sullo stomaco. Appena rimonto il disco giusto scopro com'č la cosa,
ma ho il sospetto che sia una vera, effettiva, puttanata immonda :-(.
TNX, comunque.
Bye, G.