Frage

Bei der Firma, für die ich arbeite, habe ich eine Fehlerprotokollierungsklasse erstellt, um Fehler in meiner ASP.NET -Anwendung zu behandeln. Es ist eine benutzerdefinierte Klasse, da wir keine zusätzliche Software auf unseren Servern installieren dürfen (NLOG, LOG4NET usw.).

Ich verwende es derzeit in zwei meiner Projekte und habe einige gute Ergebnisse daraus gemacht. Im Moment fange ich die Fehler ein, die Seiten- und Anwendungsfehler verursachen. Es sendet und speichert die Fehlermeldung und alle inneren Ausnahmen.

Das Problem, das ich jetzt habe, ist, dass ich Fehler erhalte, die ich nicht ganz sicher bin, wie ich mich reproduzieren soll. Ich habe keine Fehlerberichte von meinen Benutzern gehört. Ich bin mir nicht sicher, was sie tun oder wenn sie diese als Fehler ansehen.

Ich denke darüber nach, auf jeder Seite ein Ereignisprotokoll zu erstellen, oder über diejenigen, zu denen ich zusätzliche Informationen möchte. Halten Sie es als Sitzungsvariable auf der Seite und schreiben Sie Ereignisse (Start/Ende der Funktionen, variable Änderungen usw.). Nur wenn ein Fehler aufgerufen wird, um diese zusammen mit der Fehlermeldung zu senden, um festzustellen, ob er ein besseres Bild davon gibt, was vor sich geht. Ich hoffe, dass mir auf diese Weise keine Tonnen von Ereignisprotokollen vorhanden sind, wenn alle Benutzer auf die Anwendung zugreifen und nur vor dem Fehler mit dem einen Benutzer vorhanden sind.

Kennen Sie irgendwelche Fallstricke, die ich mit der Methode beobachten sollte?

Haben Sie einen Rat für die Suche?

Aktualisieren:

@Saret: Ich verstehe, woher du mit dieser Antwort kommst und ich stimme zu. Ich bin ziemlich neu in dieser Firma und muss immer noch lernen, wie sie Dinge tun. In der Vergangenheit habe ich Gespräche mit meinen Kollegen geführt, wie es großartig wäre, dieses Produkt zu führen oder dieses Open -Source -Projekt zu verwenden. Das Problem ist darauf zurückzuführen, dass wir an sicheren Systemen arbeiten und die Genehmigung erhalten, um diese Dinge zu erhalten, die viel Zeit, die Top -Deckung und den Umgang mit all der Bürokratie benötigen. Ich werde die Situation weiter untersuchen, weil ich glaube, dass ein gutes Fehlerprotokollierungssystem wichtig ist, derzeit wird nichts verwendet.

@Jim Blizard: Ich wollte versuchen, alles an einem Ort zu lösen, um zurückzukehren und herauszufinden, was für die Situation wichtig ist, die den Fehler verursacht hat. Ich wollte nicht in eine Überladung von Informationen geraten, über die in künstlicher Rede, über die Roberto Barros verknüpft wurde. Meine aktuelle Denkmethode ist, eine Zeichenfolge auf jeder Seite im Speicher zu behalten. Wenn ein Fehler auf dem Page_Error -Ereignis verkleinert wird, schnappen Sie sich diese Zeichenfolge und fügen Sie sie an die Ausnahme hinzu, die protokolliert wird. Auf diese Weise probiere ich nur die aufgetretenen Fehler/Ausnahmen ab und speichere das Ereignisprotokoll mit diesem Fehler. Wenn nichts passiert, wird dieses Protokoll, das erstellt wurde, in den Bit -Eimer fallen gelassen, um nie wieder gesehen zu werden.

@Roberto barros: Danke für diesen Link, ich erinnere mich, dass ich ihn irgendwo gelesen habe, aber vergessen habe, ihn zu retten.

War es hilfreich?

Lösung

Dies ist möglicherweise nicht die genaue Antwort, nach der Sie suchen, aber warum sollten Sie Ihren eigenen Fehlerprotokollierungsmechanismus entwickeln, wenn es leistungsstarke Tools gibt (die Sie erwähnen), die all diese wichtigen Probleme für Sie behandeln?

Ich kann es schätzen, dass Sie keine zusätzliche Software installieren dürfen, aber keine Bibliotheken nur an Klassen wie Ihrem benutzerdefinierten Code protokollieren? Wo ist der grundlegende Unterschied? Ich würde rechnen, dass die Zeit, die ich mir Sorgen um die Implementierung eines Protokollierungsrahmens für die Befürworterin für eine angemessene Protokollierungslösung für eine Business Case für eine angemessene Protokollierungslösung für die Implementierung für eine angemessene Protokollierungslösung, rechnen würde.

Andere Tipps

Ich habe einmal für eine Agentur gearbeitet, die keine Installation von etwas zulässt, das nicht nur mein eigener Code oder deren (schreckliche) COM -Objekte war. Wenn Sie diese Art von Einschränkung haben, prüfen Sie, ob Sie die Quelle für log4Net greifen und in Ihr Projekt einbeziehen können.

Es gibt nichts Besseres als log4net, wenn es um Protokollierung geht.

Ich persönlich habe den folgenden Ansatz für die Protokollierung von ERros (und nur Protokollfehlern) in einer ASP.NET -Anwendung gewählt:

  • verwenden protected void Application_Error(object sender, EventArgs e) { Server.Transfer("~/Support/ServerErrorSupport.aspx", true); } (Ich mache a Server.Transfer alle Postdaten bewahren.)

  • Generieren Sie eine Fehler -ID, die für diesen Fehler eindeutig ist (so können nachfolgende Repports für denselben Fehler gruppiert werden). Die ID ist ein Hash, das aus einer verketteten Zeichenfolge berechnet wird, die aus: Datei, Methode, Leinen und Fehler.Message besteht. Ich erhalte die Datei-, Methoden- und Leinenwerte über einen Regex auf der Stacktrace.

  • Ich protokolle alle folgenden Daten in einer XML -Struktur (abhängig vom Datentyp speichere ich den Wert unterschiedlich, Werttypen => toString (), iserializable => serialize, ...):

    1. Maschinename: application.Server.Machinename
    2. Physicalroot: application.server.mappath ("~/")
    3. Requesturl: application.request.url.toString ()
    4. Anwendungssetzungen: WebConfigurationManager.Appsetings
    5. ConnectionSeting: WebConfigurationManager.ConnectionStrings
    6. QueryString: application.request.queryString
    7. Formpost: application.request.form
    8. Sitzung: application.Session
    9. Httpheaders: application.request.Headerers
  • Speichern Sie die XML -Struktur als lokale Datei, die die Fehler -ID und einen Zeitstempel enthält. Ich habe diesen Ansatz gewählt, weil:

    • Ich kann das Rapport (XML-Datei) an mich selbst verschicken (während des Tests/Debuggens sehr einfach)
    • Speichern Sie es lokal oder in einer Datenbank während der Produktion
    • Da die Datei nur ein (Dump to HD) ist, kann nicht viel schief gehen, während der Fehlerbericht (wie eine Serververbindung, DB -Probleme usw.) sicherstellen kann, dass Sie Berechtigungen schreiben.
    • Zusätzlich erhält der Benutzer auf der Seite servereRrorsupport.aspx nach dem Speichern der XML -Datei die Option, zusätzliche Informationen einzugeben und eine E -Mail -Adresse hinzuzufügen, um den Fortschritt in Bezug auf den Fehler auf dem Laufenden zu halten. Dies wird an das XML -Dokument angehängt.
    • Ich verwende eine XSLT -Datei, um die Fehlerdaten (XML) in einem guten Fehlerbericht zu formatieren.

Für Fehler bin ich ein großer Fan von Protokollierung. Wenn die Dinge falsch gehen, sind Informationen sehr wertvoll. Ich würde das gesamte Protokoll an einem Ort (Textdatei oder Datenbanktabelle) mit einer Sitzungskennung beibehalten, um relevante Ereignisse zusammen zu gruppieren.

Hier ist, was ich gerne protokolliere:

  • Fehler-/Debug -Level (Infugieren, Debug, Problem, Absturz usw.)
  • Zeit
  • Beschreibender Text (normalerweise eine Zeile)
  • Stapelspur (wenn möglich)
  • Daten (Benutzer, Sitzung, Variablenwerte usw.)

Der einfachste Weg ist, in eine Textdatei zu schreiben, aber es kann schön sein, sie in einer Datenbank zu haben. Sie können auch das Windows -Ereignisprotokoll verwenden. Einige Dinge, auf die man achten sollte. Hmm ... Sie müssen Ihre Protokolle regelmäßig ausräumen.

Lustige Geschichte: Einmal hatten wir einen Fehlerprotokoll, der sich in der Datenbank angemeldet hatte, aber wir hatten schlechte Datenbank -Anmeldeinformationen, die einen Fehler verursachten, der dann protokolliert wurde. Am Ende erhielt er Stapelüberläufe aus der Reursion (IIRC).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top