Non reinventare la ruota.
.NET Framework ha già la registrazione che puoi usare facilmente nella tua applicazione.
Il framework di registrazione gestirà il multithreading per te (e TraceSource
è thread-safe secondo la documentazione ). Sotto il cofano, quando non è possibile scrivere il file di log (il che è piuttosto raro, dato che TraceSource
utilizza internamente un blocco globale, e non necessariamente svuota immediatamente ogni messaggio nel file), creerà un altro file con un GUID in il suo nome (che garantisce che il nome sia unico ). Ad esempio, se il file principale è chiamato app.log
, creerà un file simile a app-f24742d6-ec9c-44e6-8ba5-c0ef1a70dc00.log
.
Si noti che i file contenenti i registri vengono creati automaticamente. Il nome del file è configurato tramite il file di configurazione (illustrazione in punto 1 , scorrere il codice a destra). Inoltre, non sei limitato a registrare i file; per esempio puoi configurare l'applicazione per registrare messaggi importanti su Windows Events.
La sicurezza del thread di TraceSource
significa che puoi renderlo statico e chiamarlo da diverse istanze (altrimenti, saresti costretto a creare un TraceSource
a livello di istanza, che non ha molto senso). Questo non significa che ci dovrebbe essere solo un TraceSource
nella tua applicazione; lo schema comune è di avere uno TraceSource
statico per ogni classe che utilizza la registrazione: questo riduce l'accoppiamento tra classi, dato che più TraceSource
s usano la stessa configurazione dell'applicazione. Come utilizzare TraceSource tra le classi fornisce un esempio di tale modello.
Si potrebbe anche voler vedere come le librerie di log di terze parti risolvono lo stesso problema. log4net è un'alternativa popolare alla libreria di registrazione di .NET Framework e:
is thread-safe [...] - the framework manages everything for you.
Fonte: Log4Net FileAppender non è sicuro?
Inoltre, se sei interessato a registrare ogni metodo, puoi cercare AOP . Uno degli usi pratici di AOP è quello di essere in grado di tracciare ogni chiamata a ogni metodo, senza dover fare il noioso compito di includere il codice relativo all'accesso ai metodi stessi.