Laden...

Exception Methode, File und Zeile auslesen

Erstellt von C#Gustl vor 11 Jahren Letzter Beitrag vor 11 Jahren 1.741 Views
C
C#Gustl Themenstarter:in
36 Beiträge seit 2012
vor 11 Jahren
Exception Methode, File und Zeile auslesen

Hallo,

ich habe die Suchfunktion schon bemüh, habe jedoch nichs passendes finden können.

Ich möchte bei Exceptions die Fehlermeldung in einer errlog.txt umleiten. Dort soll dann die ex.message vorhanden sein, der user, der hostname, datum und, was ich nicht weiß wo ich das in ex finde, Methode, File und Zeile wo die Exception ausgelöst wurde.

wenn ich mit ex.ToString(9 ausgeben lasse, kommt folgendes:> Fehlermeldung:

...
...
bei System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
bei System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
bei System.Data.SqlClient.SqlConnection.Open()
bei SMT_JEDEC.station.get_ruestungsnummer() in C:\c#_projekte\SMT-JEDEC\SMT-JEDEC\station.cs:Zeile 314

Genau die letzte Zeile in der Ausgabe würde ich gern in die errorlog.txt speichern.
Habe auch schon in ex.getType() gesucht, aber dort finde ich wohl nicht die entsprechenden Eigenschaften etc., die ich dafür benötige.

Für einen Hinweis wäre ich dankbar.

Wenn nicht nehme ich einfach ex.ToString() und hole mir die letzte Zeile raus. Aber sollte doch auch anderes gehn?

Danke.

Gruß Gustl

2.891 Beiträge seit 2004
vor 11 Jahren

Das das Dingens "StackTrace" heißt, solltest du eigentlich wissen. Und mit diesem Stichwort kommt man dann auch zur Lösung:


StackTrace stackTrace = new StackTrace(exception,true);
if (stackTrace.FrameCount>0)
{
   StackFrame stackFrame = stackTrace.GetFrame(stackTrace.FrameCount-1);
   
   string fileName = stackFrame.GetFileName();
   int lineNumber = stackFrame.GetFileLineNumber();
}

1.820 Beiträge seit 2005
vor 11 Jahren

Hallo!

Die von dN!3L genannten Methoden im StackFrame geben allerdings nur im Debug-Mode bzw. wenn die passende dbg-Datei vorhanden ist, die genauen Informationen zurück.

Nobody is perfect. I'm sad, i'm not nobody 🙁

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo C#Gustl,

ich würde hier auf A Tracing Primer - Part I setzen, dort kann mittels Konfiguration das von dir gewünschte erreicht werden.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

3.825 Beiträge seit 2006
vor 11 Jahren

Hallo Gustl,

Du kannst einstellen dass "Release" auch eine PDB-Datei erzeugt, mit Zeilennummern, ohne Sourcecode. Dann bekommst Du auch bei einem Kunden mit Releaseversion die Zeilennummer im Stack angezeigt.

Es lohnt sich mehrere Stackeinträge ins Log zu schreiben, da nicht immer die untere Zeile die notwendige Information enthält.

Falls vorhanden auch die Inner.Exception mitloggen.

Grüße Bernd

Workshop : Datenbanken mit ADO.NET
Xamarin Mobile App : Finderwille Einsatz App
Unternehmenssoftware : Quasar-3