2012-06-27 13 views
10

Sto cercando di capire come funziona TracingCapire come funziona Trace in C#

Ho creato un semplice nuovo progetto web. Questo è il mio codice che posso utilizzare

// Create a trace listener for the event log. 
EventLogTraceListener myTraceListener = new EventLogTraceListener("myEventLogSource"); 

// Add the event log trace listener to the collection. 
Trace.Listeners.Add(myTraceListener); 

// Write output to the event log. 
Trace.WriteLine("Test output"); 

sto prendendo l'aiuto di questo msdn link

Le impostazioni nel mio web.config è la seguente

<system.diagnostics> 
<trace autoflush="false" indentsize="4"> 
    <listeners> 
    <add name="myListener" 
     type="System.Diagnostics.EventLogTraceListener" 
     initializeData="TraceListenerLog" /> 
    </listeners> 
</trace> 
</system.diagnostics> 

Tuttavia quando si esegue questo codice, Non so dove sta succedendo questo logging, controllo EVENT VIEWER, sotto il "Log applicazioni e servizi", mi aspettavo di creare un nuovo log con il nome "myEventLogSource", ma questo non è successo.

Per favore qualcuno può spiegarmi come funziona.

+0

Puoi dirci cosa succede quando cambi 'autoflush' a' true' per favore nella configurazione? Oppure la proprietà 'AutoFlush' della classe' Trace'. In alternativa, chiama 'Flush' dopo aver scritto. Inoltre, la configurazione XML ti evita di dover creare/configurare gli ascoltatori nel codice. –

+0

La creazione di nuove origini del registro eventi richiede diritti di amministratore. Esegui questo comando in un prompt dei comandi di amministrazione prima 'eventcreate/ID 1/L APPLICATION/T INFORMATION/SO myEventLogSource/D" Crea myEventLogSource "' – adrianm

risposta

7

Nel registro dell'applicazione, verificare se si hanno due origini che si stavano scrivendo nel registro dell'applicazione, una è TraceListenerLog e l'altra è myEventLogSource. Nuovo registro non verrà creato, entrambi utilizzeranno il registro dell'applicazione. Se si desidera creare un nuovo log e si desidera scrivere output di analisi ad esso, si può fare in questo modo (ovviamente, accedere nome non deve essere uguale al nome di origine):

 string logSource = "_myEventLogSource"; 
     if (!EventLog.SourceExists(logSource)) 
      EventLog.CreateEventSource(logSource, logSource); 

     EventLogTraceListener myTraceListener = new EventLogTraceListener(logSource); 

     // Add the event log trace listener to the collection. 
     System.Diagnostics.Trace.Listeners.Add(myTraceListener); 

     // Write output to the event log. 
     System.Diagnostics.Trace.WriteLine("Test output"); 

Anche se l'origine non esistesse, le informazioni di traccia verrebbero scritte nel registro eventi nel registro dell'applicazione con un nome origine passato al costruttore EventLogTraceListener.

+0

Proverò questo, ma se l'origine dell'evento non esiste, allora il codice (nella domanda) lancia un errore? – Yasser

+0

Verificherà se esiste l'origine (EventLog.SourceExists (logName)), se non esiste verrà creato (EventLog.CreateEventSource (logName, logName)). Provalo, se hai un'applicazione web puoi inserire questo codice, diciamo, il gestore di eventi Page_Load. Dopo aver eseguito questo Visualizzatore eventi ancora una volta per ottenere l'elenco aggiornato dei registri esistenti. –

+1

Anche se l'origine non esisterebbe, le informazioni di traccia verrebbero scritte nel registro eventi nel registro dell'applicazione con un nome origine passato al costruttore EventLogTraceListener. –