| 

.NET C# Java Javascript Exception

2
Hi,

ich habe eine Anwendung mit mehrere AddIns. In der GUI Komponente will ich nun Trace-Ausgaben aus den Addins und der GUI selber anzeigen. Nun habe ich mir einen TraceListener (MyApp.TreeListTraceListener) in der GUI gebaut der eine List<> vorhält die alle TraceEvents beinhaltet und in der app.config der GUI folgendes eingetragen:

<sources>
<source name="UI" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
<listeners>
<add name="treelist" type="MyApp.TreeListTraceListener, MyApp" />
</listeners>
</source>
<source name="SysMgmt AddIn" switchName="SourceSwitch" switchType="System.Diagnostics.SourceSwitch" >
<listeners>
<add name="treelist" type="MyApp.TreeListTraceListener, MyApp" />
</listeners>
</source>
</sources>


In der GUI und in jedem Addin existiert der folgende Code:

internal static class SysMgmtTrace
{
private static TraceSource traceSource = null;

static SysMgmtTrace()
{
traceSource = new TraceSource("SysMgmt AddIn");
}

public static void WriteEvent(TraceEventType type, string message)
{
traceSource.TraceEvent(type, 0, message);
}
}


public static class WindowsClassicUiTrace
{
private static TraceSource traceSource = null;

static WindowsClassicUiTrace()
{
traceSource = new TraceSource("UI");
}

public static void WriteEvent(TraceEventType type, string message)
{
traceSource.TraceEvent(type, 0, message);
}
}


Irgendwo im restlichen Code wird dann halt "WriteEvent" aufgerufen. Nun ist es aber so, dass ich auch 2 Instanzen meines Listeners erhalte. Wie schaffe ich es, dass ich nur einen Listener habe aber trotzdem 2 TraceSources? Oder sit der Ansatz komplett falsch?
Zugebenerweise raff ich das ganze Thema grade überhaupt nicht und die MSDN Artikel machem mich grad auch nicht schlauer. Ich bitte um Erleuchtung....

Gruss Dave
22.05.2014
david.koenig09 173 6
3 Antworten
1
Es ist recht einfach möglich, mehrere TraceSources in den selben TraceListener schreiben zu lassen. Dazu muß der TraceListener in einem separaten Abschnitt "sharedListeners" definiert werden:

<sharedListeners>
<add name="treelist" type="MyApp.TreeListTraceListener, MyApp"/>
</sharedListeners>


Dann kann dieser bei den "source/listeners"-Abschnitten einfach referenziert werden:

<sources>
<source name="UI">
<listeners>
<add name="treelist" />
</listeners>
</source>
<source name="SysMgmt AddIn">
<listeners>
<add name="treelist" />
</listeners>
</source>
</sources>


Ob "sharedListeners" oder "sources" zuerst kommt, ist dabei egal.
16.06.2014
KaiR75 11 1
0
Mich wunders immerwieder warum Leute noch so was selbst schreiben. Es geht doch viel einfacher und schneller mit zB NLog.
24.05.2014
pinchbeck 373 1 8
Danke für den Hinweis, leider nicht sehr hilfreich, hätte ich eine externe Komponenten wie NLog oder log4net einbinden wollen, hätte ich danach auch gefragt. Tatsächlich ist es aber so, dass ich aus verschiedenen Gründen (die ich jetzt nicht weiter erläutern möchte) eben KEINE externen Komponenten einbinden möchte sondern konkret darauf angewiesen bin, mit der TraceSource zu arbeiten.
david.koenig09 26.05.2014
0
Brauchst Du alle TraceEventTypes? Oder reicht Information, Warning, Error?

Dann könntest Du einfach überall System.Diagnostics.Trace verwendest und dort einen Listener hinzufügst.

Trace.Listeners.Add( ... );
26.05.2014
Xantiva 2,3k 2 9
Hi,
nein, ich brauche noch Verbose und Critical, daher auch die TraceSource...

Gruss Dave
david.koenig09 26.05.2014

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH