asp.net tracing implementazione personalizzata

0

Voglio eseguire la traccia dell'evento in asp.net. Ogni volta che viene chiamato un metodo, voglio registrare alcuni dettagli specifici del metodo in un file di testo come il nome del metodo, il valore restituito e.t.c

Tuttavia, poiché le richieste arriveranno da più client, la scrittura su un singolo file porterà a problemi di blocco e di contesa del file. chiunque può suggerire un modo semplice per farlo.

Sto cercando di utilizzare un tracelistener personalizzato da system.diagnostics.tracing, ma non sono sicuro di come gestire i problemi dovuti a problemi multi-threading che ho menzionato sopra.

Qualsiasi suggerimento sarebbe di grande aiuto. grazie.

    
posta khcha22 29.03.2015 - 16:52
fonte

1 risposta

1

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.

    
risposta data 29.03.2015 - 16:59
fonte

Leggi altre domande sui tag