14 Stimmen

Wie protokolliert man eine Ausnahme in einer Datei?

Ich möchte in der Lage sein, in jedem Catch-Block eine Protokollierung durchzuführen. Etwas wie dies.

catch (Exception exception)
{
  Logger.Write(exception);
}

und dann die Einstellungen in der Konfiguration wird die Nachricht und StackTrace-Eigenschaft usw. mit Kunden-Listener abholen.

Ich würde gerne den Enterprise Library Logging Application Block verwenden. Ich bin sicher, dass jemand dies bereits getan hat.

34voto

Randy Levy Punkte 22402

Andere haben einige gute Links zum Funktionieren des Logging Application Block (LAB) gepostet, so dass ich das hier nicht wiederholen werde.

Was die Formatierung Ihrer Ausnahme betrifft, haben Sie 3 Möglichkeiten, die mir einfallen:

  1. Verwenden Sie den Standard Exception.ToString() Umsetzung (nicht schlecht)
  2. Schreiben Sie einen benutzerdefinierten Formatierer, der sich in das LAB integriert.
  3. Schreiben Sie eine Hilfsfunktion, die die Formatierung vornimmt und die Zeichenkette an die Write-Methode übergibt.

Wenn Option 1 Ihren Bedürfnissen nicht entspricht, würde ich Ihnen Option 3 empfehlen (da Option 2 zu viel ist).

Ein einfaches Beispiel wäre so etwas wie:

    catch (Exception exception)
    {
        Logger.Write(LogHelper.CreateExceptionString(exception));
    }

    ...

    public static string CreateExceptionString(Exception e)
    {
        StringBuilder sb = new StringBuilder();
        CreateExceptionString(sb, e);

        return sb.ToString();
    }

    private static void CreateExceptionString(
        StringBuilder sb,
        Exception e,
        string indent = "")
    {
        if (indent.Length > 0)
        {
            sb.AppendFormat("{0}Inner ", indent);
        }

        sb.AppendFormat("Exception Found:\n{0}Type: {1}",
            indent, e.GetType().FullName);
        sb.AppendFormat("\n{0}Message: {1}",
            indent, e.Message);
        sb.AppendFormat("\n{0}Source: {1}",
            indent, e.Source);
        sb.AppendFormat("\n{0}Stacktrace: {1}",
            indent, e.StackTrace);

        if (e.InnerException != null)
        {
            sb.Append("\n");
            CreateExceptionString(sb, e.InnerException, indent + "  ");
        }
    }

6voto

Andrew Anderson Punkte 3319

Microsoft hat bereitgestellt umfangreich Anleitung dazu hier: Entwicklung von Anwendungen mit dem Logging Application Block

Es lohnt sich, sich mit dem vertraut zu machen, was sie zu sagen haben, denn es ist sehr aussagekräftig.

Wenn Sie etwas Bodenständigeres suchen, finden Sie in diesem Blog-Artikel einige Arbeitsbeispiele: So konfigurieren und verwenden Sie den Logging Application Block

Wenn Sie nach dem Lesen dieser Informationen immer noch Probleme haben, editieren Sie Ihren Beitrag und geben Sie genauere Informationen über das Problem an.

2voto

zero Punkte 683

@iSid Ist es das, wonach Sie fragen?

public static void printException(Exception ex){
                Console.WriteLine("HelpLink = {0}", ex.HelpLink);
                Console.WriteLine("Message = {0}", ex.Message);
                Console.WriteLine("Source = {0}", ex.Source);
                Console.WriteLine("StackTrace = {0}", ex.StackTrace);
                Console.WriteLine("TargetSite = {0}", ex.TargetSite);

            }

1voto

Ta01 Punkte 30128

Sie müssen einen entsprechenden Listener für Textdateien hinzufügen - siehe este Post, seine für ASP.NET, aber die Konfigurationsdateien arbeiten die gleiche Weise über Anwendungen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X