Hallo,

ich habe mir gestern eine Klasse zur Kapselung von Tracing-Angelegenheiten geschrieben.
Hierbei verwende ich die TraceSwitch-Klasse, der ich bei der Instanzierung den Namen aus dem vorher in der web.config festgelegten Tag..


        <system.diagnostics>
                <switches>
                        <add name="GenTrace" value="3" />
                </switches>
        </system.diagnostics>

�bergebe. Das scheint auch alles zu funktionieren.


public ErrorTrace(string switchName, string switchDescription, Exception ex, string ownMessage){


_tsTraceSwitch = new TraceSwitch(switchName,switchDescription);

                        if (ownMessage == string.Empty)
                                ownMessage = "Keine eigene Nachricht.";

if (_tsTraceSwitch.Level == TraceLevel.Off)
return;
string logPath = ConfigurationSettings.AppSettings["ErrorLog"];
if (null == logPath || String.Empty == logPath)
throw new ArgumentException("Der AppSettings-Eintrag 'ErrorLog' ist nicht gesetzt oder leer!!");
//Wenn Datei nicht vorhanden dann erzeugen:
string mappedLogPath = HttpContext.Current.Server.MapPath(logPath);
if (!File.Exists(mappedLogPath))
File.Create(mappedLogPath);
this._SwErrorFile = File.AppendText(mappedLogPath);
this._txtWrTrListener = new TextWriterTraceListener(this._SwErrorFile);
Trace.Listeners.Add(this._txtWrTrListener);


In Abh�ngigkeit vom TraceLevel der TraceSwitch-Instanz wird ein Trace.WriteLine(Der Exception.StackTrace)
und ggf noch weitere Informationen ausgegeben. Etwa folgenderma�en:


                                switch (this._tsTraceSwitch.Level){
                                case (TraceLevel.Verbose):{
                                        this.showExeptDetails(ex);
                                        Trace.WriteLine(ownMessage);
                                        Trace.Flush();
                                        this._SwErrorFile.Close();
                                }//case
                                        break;
                                case (TraceLevel.Info):{
                                                this.showExeptDetails(ex);
                                                Trace.WriteLine(ownMessage);
                                                Trace.Flush();
                                                this._SwErrorFile.Close();
                                }//case
                                        break;
                                case (TraceLevel.Warning):{
                                        this.showExeptDetails(ex);
                                        Trace.Flush();
                                        this._SwErrorFile.Close();
                                }//case
                                        break;
                                ......

Wenn ich anschliessend einen Fehler in meiner Anwendung erzeuge, den ich abfange und im Catch-Block eine Instanz dieser ErrorTrace-Klasse erstelle, so wird direkt durch den Konstruktor oben genannter Code ausgef�hrt.

Frage dazu:

Laut Doku sollte der Trace.WriteLine(...) nur ausgef�hrt werden, wenn ich im VS Release, nicht aber Debug eingestellt habe und in der web.coonfig
<trace enabled="true" requestLimit="..... />
eingestellt sei. Beides scheint in meinem Fall VS aber nicht zu interessieren. Der Eintrag in die Datei findet jedenfalls statt, es sei denn, ich habe im <switches> den value="0" (f�r Off) angegeben.


Habe ich hier vielleicht etwas missverstanden oder �bersehen?

Viele Gr��e
Lars



www.zoologie-online.de

Lars Berner
Stormcrow-Software
Postfach: 110123
69071 Heidelberg

---
Ausgehende Mail ist zertifiziert virenfrei.
�berpr�ft durch AVG Antivirus System (http://www.grisoft.com/de).
Version: 6.0.614 / Virendatenbank: 393 - Erstellungsdatum: 05.03.2004

Antwort per Email an