2012-09-09 12 views
5

Ich habe eine Config-Datei wie:So fügen RollingFlatFileTraceListenerData programmatisch

<configSections> 
    <section name="loggingConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.LoggingSettings, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/> 
</configSections> 

<loggingConfiguration name="Logging Application Block" tracingEnabled="true" defaultCategory="Tracing" logWarningsWhenNoCategoriesMatch="true"> 
    <listeners> 
     <add listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.SystemDiagnosticsTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" type="System.Diagnostics.ConsoleTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="System Diagnostics Trace Listener"/> 
    </listeners> 
    <formatters> 
     <add template="{message}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="Text Formatter"/> 
    </formatters> 
    <categorySources> 
      <add switchValue="All" name="AppLog"> 
    <listeners> 
      <add name="System Diagnostics Trace Listener"/> 
    </listeners> 
    </add> 
</categorySources> 
<specialSources> 
    <allEvents switchValue="All" name="All Events"/>  
    <notProcessed switchValue="All" name="Unprocessed Category"/> 
    <errors switchValue="Off" name="Logging Errors &amp; Warnings"/> 
</specialSources> 

Neben der Konsole Hörer, die ich habe, ich programmatisch eine RollingFlatFileTraceListenerData definieren möchten:

var listener = new RollingFlatFileTraceListenerData("AppLog", @"c:\log.log", "", "", 0, "yyyyMMdd-hhmm", Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollFileExistsBehavior.Increment, Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.RollInterval.Hour, TraceOptions.LogicalOperationStack, "Text Formatter"); 

Wie Kann ich meinen neu definierten Listener programmatisch zur Liste der Listener hinzufügen?

Antwort

5

Im Allgemeinen, in asp.net apps, ist eine einfache Möglichkeit, TraceListeners programmatisch mit der Diagnose 'Trace.Listeners.Add() -Methode hinzuzufügen. Ich mag diese auf Application_Start in meinem global.asax.cs tun():

using D = System.Diagnostics; 

... 

protected void Application_Start() 
{ 
    if (D.Trace.Listeners["MyTraceListener"] == null) 
    { 
     D.Trace.Listeners.Add(new MyTraceListener("") { Name = "MyTraceListener" }); 
    } 

    ... 

} 

Der einzige Grund, warum ich überprüfen, ob es bereits vorhanden ist, weil ich als einmal Application_Start() Feuer mehr zu sehen, wenn auch selten .

+0

Application_Start wird nur bei einem Neustart des App-Pools mehr als einmal ausgelöst. IIS führt dies automatisch durch, wenn keine Anforderungen für einen bestimmten Zeitraum oder basierend auf Recyclingregeln eingegangen sind. Sollte jedoch kein Problem sein, da es mit einer neuen "HttpApplication" beginnen wird –