Formattazione dell’output di traccia

Sto usando TextWriterTraceListener per registrare i messaggi di diagnostica in un file di testo. Tuttavia, non dovrei nemmeno registrare un timestamp di ogni messaggio di traccia aggiunto. È ansible definire un tipo di formattatore per l’ascoltatore che aggiunga automaticamente data / ora?

Attualmente sto aggiungendo timestamp manualmente su ogni chiamata a Trace.WriteLine() ma questo non è molto comodo.

Ti suggerisco di usare invece Log4Net , che ha molta più personalizzazione.

In alternativa è ansible scrivere la propria implementazione TraceListener che inserisce i timestamp per te. Potresti persino essere in grado di derivare da TextWriterTraceListener e sovrascrivere Write e WriteLine :

 public override void Write(string x) { // Use whatever format you want here... base.Write(string.Format("{0:r}: {1}", DateTime.UtcNow, x)); } public override void WriteLine(string x) { // Use whatever format you want here... base.WriteLine(string.Format("{0:r}: {1}", DateTime.UtcNow, x)); } 

Recentemente ho riscontrato una situazione simile e sembra che ora abbiamo uno strumento molto adatto all’attività, ovvero Essential Diagnostics . Si imposta un listener in app.config come nel codice sottostante e quindi si inserisce Essential.Diagnostics.dll nella stessa cartella. NESSUN RACCOMANDAZIONE È RICHIESTA. È ansible utilizzare questo con qualsiasi applicazione che utilizza System.Diagnostics per la traccia, anche se non si possiede la fonte. Non è meraviglioso?

    

È ansible scrivere la sottoclass TextWriterTraceListener che sovrascrive i metodi WriteLine, decora la linea e quindi passa la stringa decorata all’implementazione della class base per eseguire l’output effettivo.

O aggiungi semplicemente “DateTime” come traceOutputOption.

Non è davvero una risposta alla tua domanda, ma hai preso in considerazione solo l’uso di log4Net ?

Puoi configurarlo per aggiungere ore, ecc. Insieme a una grande quantità di altre utili funzionalità.

Prendi in considerazione l’utilizzo del blocco dell’applicazione di registrazione

Anche se questo è vecchio e una risposta è stata accettata, aggiungerò un’altra opzione. È ansible utilizzare l’addon Ukadc.Diagnostics da codeplex. Tra le altre cose, consente di definire una formattazione personalizzata, simile alla formattazione che è ansible definire con log4net e NLog. È una dipendenza solo per la configurazione. Cioè, si configura l’uso di Ukadc.Diagnostics attraverso il file app.config. Non ci sono dipendenze di origine (si continua a effettuare il login tramite System.Diagnostics non tramite un’API speciale). Detto questo, ci sono alcune limitazioni di cui dovresti essere a conoscenza:

  1. Le opzioni di formattazione attualmente implementate in Ukadc.Diagnostics funzionano davvero correttamente solo quando si registra con TraceSources. Quando si esegue il login con Trace.Write e Trace.WriteLine, l’object TraceEventCache non viene compilato ed è qui che la maggior parte degli oggetti di formattazione riceve le informazioni.

  2. È necessario utilizzare un TraceListener di Ukadc.Diagnostics (o un listener personalizzato derivato dal TraceListener di Ukadc.Diagnostics) per visualizzare la formattazione personalizzata nell’output. Se hai trovato un nuovo file di rolling super duper, TraceListener, dovrai lavorare un po ‘per usarlo in combinazione con la formattazione di Ukadc.Diagnostics. Questo potrebbe essere difficile come reimplementare l’ascoltatore in termini di base TraceListener di Ukadc.Diagnostics. Oppure potrebbe essere più semplice, se si potesse semplicemente creare un nuovo TraceListener basato su Ukadc.Diagnostics che contenga il super-duplicazione di TraceListener, formatta i messaggi per Ukadc.Diagnostics e quindi deleghi ai metodi Write / WriteLine del listener contenuto.