2008-09-27 5 views
15

Ich denke, ich könnte den Punkt vermissen, ein Protokollierungs-Framework für Ihre Anwendung zu haben. In all den kleinen Apps habe ich immer eine kleine "Logging" -Klasse geschrieben und Log-Nachrichten nur an eine Methode übergeben, die in eine Datei geschrieben wird.Worauf kommt es bei der Verwendung eines Logging-Frameworks an?

Was ist der Zweck eines Logging-Frameworks von Drittanbietern wie log4net? Ist es Thread-Sicherheit mit Protokollierung Schreibvorgänge oder fehlt mir etwas?

Antwort

18

Das ist eine ausgezeichnete Frage.

Der erste Grund ist "warum nicht?" Wenn Sie ein Protokollierungsframework verwenden, profitieren Sie von den Wartungsvorteilen, wenn Sie bereits gepackte Elemente verwenden.

Der zweite Grund ist, dass Protokollierung subtil ist.Verschiedene Threads, Sitzungen, Klassen und Objektinstanzen können bei der Protokollierung eine Rolle spielen, und Sie möchten dieses Problem nicht spontan herausfinden.

Der dritte Grund ist, dass Sie möglicherweise einen Leistungsengpass in Ihrem Code finden. Wenn Sie herausfinden, dass Ihr Code langsam ist, weil Sie ohne Pufferung in eine Datei schreiben oder Ihre Festplatte keinen Speicherplatz mehr hat, weil der Logger keine alten Dateien überrollen und komprimieren kann, ist das ein Problem.

Der vierte Grund ist, dass Sie an syslog anhängen oder in eine Datenbank oder einen Socket oder in andere Dateien schreiben möchten. Frameworks haben diese Funktionalität eingebaut.

Aber wirklich, die erste Antwort ist die beste; Es gibt nur wenig Vorteile beim Schreiben Ihrer eigenen, und eine ganze Reihe von Nachteilen.

3

möchten Sie vielleicht zu einem db für einige Nachricht zu protokollieren wechseln oder ein Alarmierungssystem, dass die Seiten der Arme auf die Unterstützung

Noch wichtiger ist aber, die meisten Logging Frameworks können Sie die loglevel verschiedener Klassen spezifizieren, so Sie brauchen nicht ein neues binäres jedes Mal, wenn Sie wollen mehr/weniger Protokollierung (die ausführliche Protokollierung für die Fehler in der Produktion einfach getupft)

Log4Net's site Detail hat

1

Je nachdem, wie intelligent Ihre eigene Logging-System-Implementierung schneiden ist.

In Java, wenn Sie Protokolltypen usw. erben möchten, könnte es zu mühsam sein und Sie würden ein Tool von Drittanbietern wie Log4J bevorzugen. Ich nehme an, dass es ähnliche Dinge für C# gibt. In ähnlicher Weise, wenn Sie die Protokollebene über die Befehlszeile festlegen möchten.

Wenn Sie nur alle Ihre System.out routen und steuern möchten, ob sie gedruckt werden, wenn Sie kompilieren, wäre Ihr eigener Logger gut.

2

In einem Wort: Flexibilität. Log4xxx gibt Ihnen die Möglichkeit, unterschiedliche Logging-Level zu verwenden, verschiedene Code-Module in verschiedenen Dateien zu protokollieren, und Sie können darauf vertrauen, unabhängig davon, welche seltsame Situation es trifft (was wird Ihr Logger tun, wenn die Festplatte nicht mehr voll ist) ?)

2

Etwas, das die anderen Kommentare weggelassen haben: Wenn es bereits eine Bibliothek gibt, die das tut, was Sie wollen, es erspart Ihnen, den Code zu schreiben.

Möglicherweise spielen Sie Semantik hier: für mich ist ein "Logging-Framework" in der Regel wenig mehr als eine Klasse, die Protokollnachrichten in eine Datei schreibt ... so was Sie getan haben, ist Ihre eigene Protokollierung schreiben Rahmen. Wenn Sie dies getan haben, gibt es offensichtlich einige Punkt in "mit einem Logging-Framework"!

Letztendlich müssen Sie sicherstellen, dass die gleichzeitige Protokollierung korrekt gehandhabt wird (Sperren des Ausgabestreams), Protokollierung in einer Datei, Syslog usw., Protokollierung kann ausgeführt werden und so weiter. Sie können sich diesen Aufwand sparen, indem Sie den bewährten Code von jemand anderem verwenden.

1

Logging Frameworks bieten Flexibilität und verhindern, dass Sie das Rad neu erfinden. Ich weiß, dass es hirntot ist, einfach an eine Datei in jeder modernen Sprache anzuhängen, aber hat dein selbstgewachsener Logger mehrere Ziele? Können Sie das An- und Abmelden zur Laufzeit aktivieren? Warum einen platten Reifen riskieren, wenn diese Räder kostenlos erhältlich sind?

+0

"hirntot einfach an eine Datei anhängen" - vs Multithread und vor allem Multicore wo Threads wirklich gleichzeitig ausführen? Microsofts ETW bietet pro-Prozessor-Pufferung von ETW-Einträgen, was meiner Ansicht nach die ideale Lösung ist. – pngaz

Verwandte Themen