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
