2009-07-02 2 views
2

Hat jemand Tipps, wie Sie meine Protokolle für eine Webanwendung minimieren können?Wie reduzieren Sie redundante Protokollmeldungen für eine Web-App?

Momentan protokolliere ich jeden Fehler. Wenn also eine Situation auftritt, in der bei jeder Anfrage ein Fehler auftritt (z. B. ein Datenbankverbindungsproblem), wird sie möglicherweise bei jeder Anfrage für jeden Benutzer protokolliert. Wie Sie sich vorstellen können, müssen nicht zu viele Benutzer zu viele Dinge tun, um eine riesige Protokolldatei mit redundanten Protokollfehlern zu erstellen.

Es ist mir aufgefallen, eine Art von Flagging-Mechanismus zu erstellen, um den gleichen Fehler innerhalb von N Minuten nicht zu protokollieren. Ich mag das nicht aus zwei Gründen; 1) es könnte das bedeutendste Problem unter den anderen verbergen und 2) Kaskadierungsfehler können ihre Fehlerspur nicht korrekt protokollieren, wobei zuvor protokollierte Fehler wegfallen, wodurch möglicherweise meine anfängliche Diagnose weggeworfen wird.

Ich bin mir sicher, dass ich nicht die erste Person bin, die dieses Problem hat ... Hat jemand einen Rat, wie man redundante Log-Nachrichten für eine Web-App reduzieren kann?

+0

Welches Protokollierungs-Framework verwenden Sie? log4net, ELMAH, Enterprise, selbstgewachsen, andere? –

+0

@Dillie-O-Homegrown. Aber ich wäre bereit zu wechseln. Meinst du, ein Protokollierungsrahmen würde das für mich erledigen? –

Antwort

0

ich es mit meinen Benutzerfehlermeldung kombiniert haben, so dass, wenn die Fehlermeldung wird dem Benutzer angezeigt, er kann entweder klicken, OK oder An den Support senden. Dann wird der vollständige Fehler, Aufruf-Stack, & vollständige Anfrage Informationen in den Bug-Tracker eingegeben.

Dies wurde noch nicht veröffentlicht, also müssen wir noch sehen, ob dies eine gute Idee ist ... wird Sie auf dem Laufenden halten.

PS-Ich habe meine eigene Frage als eine für die Aufzeichnung beantwortet und wählte es aus, da die anderen Antworten meine Bedürfnisse nicht erfüllten.

2

Sie könnten ein Protokollierungssystem erstellen, das sich an einen DB anmeldet, und ein Flag festlegen, um zu bestimmen, ob einzelne Einträge protokolliert werden sollen, oder nur einen Zähler für einen Basisprotokolleintrag berechnen. Bei der Zählung sehen Sie die Gesamtanzahl der Fehler, aber keine explodierende Protokolldatei.

+0

Danke, und das ist eine gute Idee, aber ich würde es vorziehen, in Textdateien zu loggen. –

1

Sie könnten versuchen, den letzten Eintrag mit dem Fehler zu vergleichen, den Sie in das Protokoll schreiben möchten. Wenn dies derselbe Typ und dieselbe Quelle ist, fügen Sie am Ende eine Zeichenfolge "(wiederholt n mal)" an.

Jedes Mal, wenn der Logger eine solche Zeichenfolge und die Fehler übereinstimmen sieht, kann es die n erhöhen, bis eine andere Art von Fehler kommt.

+0

Danke. Ich habe daran gedacht, aber ich möchte nicht in die Logbücher "hineinlesen". –

+0

Ja, es ist wahrscheinlich besser, "Nur-Schreiben" Logging zu machen, aber Linux macht das in Syslog-ng, denke ich. Ich habe gesehen, "letzte Nachricht wurde n mal wiederholt" an einigen Stellen in/var/log. – macbirdie

+0

@ macbirdie-Nun, Sie könnten eine laufende Zählung in Ihrer App behalten und zurücksetzen. Aber das fügt immer noch eine Zeile zu Ihrem Protokoll hinzu ... es sei denn, Sie könnten es protokollieren, dann einen laufenden Zähler im Speicher behalten und dann die "letzte Nachricht wurde n mal wiederholen" vor der nächsten Protokollnachricht hinzufügen. Das könnte funktionieren! +1 –

1

Um die Frage zu beantworten, die Sie in dem Kommentar hatten, gibt es meiner Kenntnis nach keine Out-of-the-Box-Lösung, die diese Art von Funktionalität umfasst.

Eine andere zu berücksichtigende Idee (mir ist klar, dass Sie Ihre eigene Antwort akzeptiert haben) wäre, jedem Fehlerprotokollierungspunkt im System eine ID zuzuweisen. Wenn der Fehler protokolliert wird, können Sie eine einfache Hash-Tabelle mit der Fehler-ID und zu welcher Uhrzeit der Fehler protokolliert wurde. Wenn dann bei der Verarbeitung der Protokollierung der Fehler bereits im Hash vorhanden ist und innerhalb von 5 Minuten (oder zu welcher Zeit Sie sich entschieden haben) liegt, können Sie die Protokollierung einfach abbrechen und den Zeitstempel aktualisieren.

Ich bin mir nicht sicher, ob das Senden der Fehlermeldung durch die Benutzer Ihr Problem löst, denn wenn alle Ihre Benutzer die Nachricht senden, wird es genauso sein wie die Fehlerprotokolle, nur Ihr Posteingang wird überflutet im Gegensatz zur Überwachung der Protokolldatei selbst.

+0

"Ich bin mir nicht sicher, ob das Senden der Fehlermeldung durch die Benutzer Ihr Problem lösen wird" -Was ich hoffe, wird passieren, wenn die Benutzer es das erste Mal senden ... dann hören Sie auf, es zu senden. Wie ich schon sagte, ich bin hoffnungsvoll, aber wir werden sehen ... ;-) –

+0

Hmm, haben Sie ein paar Worte auf dem Fehlerbildschirm zu sagen "Schließen Sie einfach, wenn Sie es schon einmal gesendet haben" oder etwas zu dieser Effekt? Das könnte in der E-Mail-Klausel helfen. Ich weiß, es klingt albern, aber man weiß nie, wer auf der anderen Seite dieser Tastatur ist. 8^D –

+0

hmmm .. Guter Punkt. –

Verwandte Themen