Frage

Also haben wir besprochen, wie Sie die Protokollierung im Vorbeigehen an meinem Ort der Arbeit und ich wollte Fragen ob einige von Euch hier kann mir einige Ideen, Ihre Ansätze?

In der Regel unser Szenario ist keine Anmeldung wirklich an alles, und meistens .NET-apps, winforms/WPF-clients sprechen über web-services oder direkt in eine db.

So, die eigentliche Frage ist, wo oder was möchten Sie melden?Im moment haben wir user berichten von Fehlermeldungen, so dass ich annehmen würde-log-Neugründungen/Schließungen Ausnahmen...

Tun Sie es, um Aufrufe an die web-services oder der db?Die Seite geladen ist?

Wie bekommt man eine gute Vorstellung davon, was der Benutzer versucht, Sie zu tun in der Zeit?

Ist es besser, den ganzen Weg zu gehen, und melden Sie alles, was über mehrere versuche/Tag, oder nur protokollieren, was Sie brauchen, um (wenn hdd ist Billig).

Ich denke, das ist ein paar Fragen, aber ich wollte mehr Ahnung davon, was die tatsächliche Praxis ist, gibt es in größeren Geschäften!

War es hilfreich?

Lösung

Das wichtigste für die Anmeldung ist eine gute Planung.Ich würde vorschlagen, dass Sie einen Blick in die enterprise library Ausnahme und logging application block (http://msdn.microsoft.com/en-us/library/cc467894.aspx).Es ist ein bisschen eine Lernkurve, aber es funktioniert ganz gut.Der Ansatz, den ich bevorzugen im moment ist, um zu definieren, 4 Prioritätsstufen.4=nicht Behandelte Ausnahme (Fehler im Ereignisprotokoll), 3=Ausnahme Behandelt (Warnung im Ereignisprotokoll), 2=Zugriff auf eine externe Ressource wie eine webservice -, db-oder mainframe-system (Informationen im Ereignis-log), 1=Verbose/anything else of interest (Informationen im Ereignis-log).

Mit der Anwendung blockieren, es ist dann ganz leicht zu zwicken, was Niveau der Priorität, die Sie protokollieren möchten.So in der Entwicklung, Sie würde alles loggen, was aber, wie Sie bekommen ein stabiles system in der Produktion sind, würden Sie wahrscheinlich nur daran interessiert sein, nicht behandelte Ausnahmen und möglicherweise behandelt Ausnahmen.

Update:Für Klarheit, würde ich vorschlagen, müssen Sie die Protokollierung in Ihrer winform/wpf-app und webservices.In einem web-Szenario, ich habe Probleme in der Vergangenheit, wo es schwierig sein kann, zu binden einen Fehler an den client zurück bis zu den app-Server.Vor allem, weil jeder Fehler durch webservices bekommt eingewickelt wie eine SOAP-Ausnahme.Ich kann mich nicht erinnern, aus der Spitze von meinem Kopf, aber ich denke, wenn Sie verwenden eine benutzerdefinierte exception-handler (das ist ein Teil der enterprise-Bibliothek) können Sie Daten hinzufügen auf Ausnahmen wie die handlinginstance id der Ausnahme von der app-server.Dies macht es einfacher zu binden Ausnahmen auf einem client zurück, um Ihre app-box mittels LogParser (http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en).

Zweites Update:Ich mag auch, wie auf jedem anderen event ein separates Ereignis-id und Spur in eine Textdatei oder eine Kalkulationstabelle unter source control.Ja, es ist ein Schmerz, aber wenn Sie Glück haben, ein IT-team auf der Suche nach Ihrer Systeme in der Produktion, ich finde Sie tendenziell zu erwarten, dass verschiedene Ereignisse verschiedene Ereignis-ids.

Andere Tipps

Dass ein admin, ich wirklich zu schätzen, apps, log das Ereignisprotokoll (vorzugsweise Ihre eigenen, sonst wird die Anwendung log) für alle Protokollierung von trace-Protokollen.Durch die Protokollierung in das Ereignisprotokoll, Sie machen es viel wahrscheinlicher, dass Warnungen oder Fehler gefunden und behoben, indem der admin-Mitarbeiter, bevor Sie zu einem großen problem (wenn es ist ein Problem, können Sie Adresse), oder ermöglicht es Ihnen, in Kontakt zu kommen mit den devs, die die trace-Protokolle, um weiter das Problem zu beheben.

Meine größten Schmerzen Punkt in die Unterstützung einer benutzerdefinierten .NET app jetzt ist, dass es gibt 8 verschiedene Anwendungen (einige console apps, einige winforms, und einige web) vom selben Hersteller.Keiner von Ihnen melden, um das Ereignisprotokoll, Sie alle haben Ihre eigenen log-Dateien.Aber für alle die winforms-und Konsolen-apps, halten Sie die Datei öffnen, während Sie ausgeführt werden, so kann ich nicht überwachen, ist es für Fragen.Auch die logs geschrieben worden sind, etwas anders, so müsste ich parse Sie ein bisschen anders nützliche Informationen erhalten.

Dies zwingt mich zu überwachen, das Erscheinungsbild der Anwendung ist es reagiert auf die ports aktiv ist, wird die Prozess-working-set zu hoch werden, etc..), sondern als das, was den Status der Anwendung wirklich ist.

Bitte, bitte beachten Sie die Leute, die pflegen Sie Ihre Anwendung, nachdem es bereitgestellt wird, und protokolliert, die Sie verwenden können.Vielen Dank!

In diesem Beitrag highscalability.com bietet eine gute Sicht auf die Protokollierung in large scale distributed Systems.(Und zufällig er beginnt mit der Nennung eines post auf der JoelOnSoftware).

Ist es besser, den ganzen Weg zu gehen, und melden Sie alles, was über mehrere versuche/Tag, oder nur protokollieren, was Sie brauchen, um (wenn hdd ist Billig).

Die Tatsache Festplatten günstig sind ist das auch nicht wirklich ein guter Grund zu wortreich melden Sie alles, was möglich ist, für ein paar Gründe..Zum einen mit einer sehr Beschäftigten Anwendung, die Sie wirklich nicht wollen, es zu verlangsamen, und binden disc-schreibt das schreiben von logs (Festplatten sind ziemlich langsam).Der zweite Punkt, und das wichtigere - es gibt wirklich sehr wenig zu gewinnen, von terabytes worth of logs..Für die Entwicklung, Sie sind nützlich, aber Sie brauchen nicht zu halten, mehr als ein paar Minuten von Ihnen..

Einige Protokollierung ist natürlich sinnvoll, die verschiedene Ebenen der einzige Weg, um darüber zu gehen - zum Beispiel debug() info() nur protokolliert werden, wenn angefordert (in einer config-oder Befehlszeilen-flag), dann vielleicht warn - () und error() erhalten, an eine Protokolldatei gesendet

Für die meisten Dinge, die ich geschrieben habe (kleinere Skripte), die ich in der Regel nur eine debug () - Funktion, die überprüft, ob der --verbose gesetzt ist, und druckt die Nachricht..So kann ich schieben debug("some value:%s" % (avar)), wenn nötig, und nicht haben, um sorgen über das gehen zurück und entfernen debugging print () - Anweisungen everwhere.

Für web-Anwendungen, die ich in der Regel verwenden Sie einfach die web-server-Protokolle für die Statistik, und das Fehlerprotokoll.Ich nutze Dinge wie mod_rewrite ' s log, wenn nötig, aber es wäre idiotisch, lassen Sie diese aktiviert über die Entwicklung (wie Sie es schafft, viele, viele Zeilen auf jeder Seite Anfrage)

Ich nehme an, es hängt von der Anwendung selbst, aber im Allgemeinen, für große Anwendungen, die mehrere Ebenen der Protokolle, die aktiviert werden kann, wenn nötig.Für kleinere Dinge, die eine --verbose-flag oder gleichwertig, für web-Anwendungen, log-Fehler und (zu einem Punkt) log trifft.

Im Grunde, in "Produktion" melden Sie nur die Informationen, die Sie verwenden können, in der Entwicklung, loggen Sie alles, was Sie brauchen könnten möglich, um Probleme zu beheben.

Für einen typischen desktop-Anwendung, ich würde alles speichern der aktuellen Sitzung, und vielleicht store info die Nachrichten für die letzten n-Sitzungen oder bis zu x in der Größe.

Ich gehe davon aus, dass Ihre Nachrichten organisiert sind.Wir verwenden 4 Kategorien;Fehler -, warn, info, and trace.Wir sind immer noch herauszufinden, was geht auf dem level.Ich bin immer verwendet, um das analysieren von Protokolldateien, die ich in der Regel sagen "log mehr".Schwitzen Sie nicht die Lesbarkeit, wahrscheinlich sind Sie gonna haben, um Prozess die log-Datei ein wenig, bevor Sie es verwenden können.

Am Ende finden eine gute logging-framework ermöglicht Ihnen die Steuerung Ihres spool Nutzung auf Lebenszeit und Stauraum, und eine ordnungsgemäße api, minimiert die Auswirkungen auf Ihren code.Idealerweise geben Sie einfach info("waaah") oder warning("waah") und die API hat alle die Lust tagging für Sie.

Als eine schnelle Antwort würde ich sagen, kommen eine Reihe von Kategorien und umschaltbar logging-Ebenen, z.B.info, warning, error, critical, etc.

Dann machen Sie es einfach, legen Sie die Protokollebene zum optimieren der Detailgenauigkeit, die Sie benötigen.In der Regel legen Sie die Protokollebene in einer config-Datei und beenden und neu starten der app.

Ich würde auch veröffentlichen die Entwickler, was die Bedeutung für die einzelnen Ebenen.

edit:Ich würde auch ein system einzurichten, zu drehen, verkleinern, komprimieren und archivieren von log-Dateien auf einer regelmäßigen basis, vielleicht Nacht.

Danke Jungs, viel gute info, aber Martin hat mir ein bisschen mehr detail, wie zu Verfahren ist.Ich werde ihm die Antwort, wie es scheint, sind wir jetzt an der front wenigen Seiten Antworten wird drop off.

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