|
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
Waarschijnlijk eenvoudiger dan via code ( at design time ) onze TraceSources en aanverwanten te configureren, is dit te doen at configuration time. Dit kan in de Application Configuration File ( app.config ), en staat je toe zonder de code te hercompileren, en dus zelfs na deployment, het tracemechanisme te herconfigureren.
Veronderstel volgende opzet, waar nogmaals in code alles geconfigureerd wordt : Visual Basic 2010 Broncode Imports System.Diagnostics # Const TRACE = TrueClass ExampleConfigureInCode Private Shared myTraceSource1 As TraceSource Private Shared myTraceSource2 As TraceSource Public Shared Sub ConfigureTraceSources() Dim mySourceSwitch1 As New SourceSwitch( "mySourchSwitchName1", _ "Warning") Dim mySourceSwitch2 As New SourceSwitch( "mySourchSwitchName2", _ "Information") Dim myConsoleTraceListener1 As New ConsoleTraceListener myConsoleTraceListener1.Name = "myConsoleTraceListenerName1" myConsoleTraceListener1.Filter = New EventTypeFilter(SourceLevels.Error) Dim myConsoleTraceListener2 As New ConsoleTraceListener myConsoleTraceListener2.Name = "myConsoleTraceListenerName2" myConsoleTraceListener2.Filter = _ New EventTypeFilter(SourceLevels.Critical) Dim myTextWriterTraceListener As _ New TextWriterTraceListener( "trace.txt") myTextWriterTraceListener.Name = "myTextWriterTraceListenerName" myTextWriterTraceListener.Filter = New EventTypeFilter(SourceLevels.All) myTraceSource1 = New TraceSource( "myTraceSourceName1") myTraceSource1.Switch = mySourceSwitch1 myTraceSource1.Listeners.Add(myConsoleTraceListener1) myTraceSource1.Listeners.Add(myTextWriterTraceListener) myTraceSource1.Listeners.Remove( "Default") myTraceSource2 = New TraceSource( "myTraceSourceName2") myTraceSource2.Switch = mySourceSwitch2 myTraceSource2.Listeners.Add(myConsoleTraceListener2) myTraceSource2.Listeners.Add(myTextWriterTraceListener) End Sub Public Shared Sub Main() ConfigureTraceSources() myTraceSource1.TraceEvent(TraceEventType.Critical, 1, "Message 1") myTraceSource1.TraceEvent(TraceEventType.Error, 2, "Message 2") myTraceSource1.TraceEvent(TraceEventType.Warning, 3, "Message 3") myTraceSource1.TraceEvent(TraceEventType.Information, 4, "Message 4") myTraceSource1.TraceEvent(TraceEventType.Verbose, 5, "Message 5") myTraceSource1.Flush() myTraceSource2.TraceEvent(TraceEventType.Critical, 6, "Message 6") myTraceSource2.TraceEvent(TraceEventType.Error, 7, "Message 7") myTraceSource2.TraceEvent(TraceEventType.Warning, 8, "Message 8") myTraceSource2.TraceEvent(TraceEventType.Information, 9, "Message 9") myTraceSource2.TraceEvent(TraceEventType.Verbose, 10, "Message 10") myTraceSource2.Flush() Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Onderstaande tabel geeft aan welke listeners naar welke boodschappen ontvangen : Message 1 2 3 4 5 6 7 8 9 10 myConsoleTraceListenerName1 x x myConsoleTraceListenerName2 x myTextWriterTraceListenerName x x x x x x x Default x x x x Hetzelfde resultaat kan bekomen worden door in de Application Configuration File volgende informatie op te nemen : Application Configuration File <configuration>
<system.diagnostics>
<sources>
<source name="myTraceSourceName1"
switchName="mySourceSwitchName1"
switchType="System.Diagnostics.SourceSwitch">
<listeners>
<add name="myConsoleTraceListenerName1"
type="System.Diagnostics.ConsoleTraceListener">
<filter type="System.Diagnostics.EventTypeFilter"
initializeData="Error"/>
</add>
<add name="myTextWriterTraceListenerName"/>
<remove name="Default"/>
</listeners>
</source>
<source name="myTraceSourceName2"
switchName="mySourceSwitchName2"
switchType="System.Diagnostics.SourceSwitch">
<listeners>
<add name="myConsoleTraceListenerName2"
type="System.Diagnostics.ConsoleTraceListener">
<filter type="System.Diagnostics.EventTypeFilter"
initializeData="Critical"/>
</add>
<add name="myTextWriterTraceListenerName"/>
</listeners>
</source>
</sources>
<switches>
<add name="mySourceSwitchName1" value="Warning"/>
<add name="mySourceSwitchName2" value="Information"/>
</switches>
<sharedListeners>
<add name="myTextWriterTraceListenerName"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.txt">
<filter type="System.Diagnostics.EventTypeFilter"
initializeData="All"/>
</add>
</sharedListeners>
</system.diagnostics>
</configuration> De applicatie zelf kan dan vereenvoudigd worden naar : Visual Basic 2010 Broncode Imports System.Diagnostics # Const TRACE = TrueClass ExampleConfigurationTime Private Shared myTraceSource1 As New TraceSource( "myTraceSourceName1") Private Shared myTraceSource2 As New TraceSource( "myTraceSourceName2") Public Shared Sub Main() myTraceSource1.TraceEvent(TraceEventType.Critical, 1, "Message 1") myTraceSource1.TraceEvent(TraceEventType.Error, 2, "Message 2") myTraceSource1.TraceEvent(TraceEventType.Warning, 3, "Message 3") myTraceSource1.TraceEvent(TraceEventType.Information, 4, "Message 4") myTraceSource1.TraceEvent(TraceEventType.Verbose, 5, "Message 5") myTraceSource1.Flush() myTraceSource2.TraceEvent(TraceEventType.Critical, 6, "Message 6") myTraceSource2.TraceEvent(TraceEventType.Error, 7, "Message 7") myTraceSource2.TraceEvent(TraceEventType.Warning, 8, "Message 8") myTraceSource2.TraceEvent(TraceEventType.Information, 9, "Message 9") myTraceSource2.TraceEvent(TraceEventType.Verbose, 10, "Message 10") myTraceSource2.Flush() Console.ReadLine() End SubEnd ClassDownload Visual Basic 2010 Broncode Download Visual C# Sourcecode
Opnieuw krijgen we listeners die naar dezelfde boodschappen luisteren.
Bij creatie van de TraceSource objecten geef je aan de constructor mee welke de namen zijn van deze objecten. Deze komen overeen met de namen uit de configuration file.
Dit artikel is gepubliceerd op zondag 31 juli 2011 op vbvoorbeelden, bezoek de website voor een recente versie van dit artikel of andere artikels.
|