Warum sollten wir die «Logger» - Klasse als singleton?
Wir alle wissen, zu melden, ok, aber warum sollten wir darüber nachdenken, die «Logger» - Klasse ein singleton ist eine? Was passiert, wenn wir es machen, wie eine normale nicht-singleton-Klasse?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich diese hier auf der IBM Website. Es erklärt die Verwendung des Logger-Singleton-Klasse ganz gut.
Hier der link: Verwenden Sie Ihre singletons mit bedacht
Wenn Sie nicht verwenden Sie eine singleton-Klasse, die Sie würde haben, um mit der synchronisation (in eine Datei schreiben, oder was auch immer stream, die Sie verwenden) zwischen diesen verschiedenen logger-Instanzen. So ist es viel einfacher, wenn Sie nur einen global Logger-Instanz.
Das Hauptproblem ist, wo die eigentliche log persistent ist.
Wenn Sie sich schriftlich auf ein Dateisystem, dass mehr als eine Instanz (und daher wahrscheinlich, mehr als einen thread) kann dazu führen, eine unlesbare Datei.
In dem Sinne, dass je nach Pufferung und andere low-level-Mechanismen, die Nachrichten von einem schreiben bis Ende Mai gemischt mit Nachrichten oder Teile von Nachrichten) von anderen.
Kann dies ein kleineres problem, aber es ist die einzige, die ich denken kann, in nur einem (und daher Seriell) log schreiben-Objekt.
Wenn du mehr als eine log-streams, die mit unterschiedlichen Inhalten, können Sie mehrere Instanzen der logger-Klasse initialisiert, die für die verschiedenen Ausgänge.
Jedoch, wenn Sie nur eine log-stream, die mehrere logger-Klasse Instanzen führt zu einer komplexeren Implementierung, wie die Instanzen zusammen arbeiten, um zu verwalten die eigentliche Ressource. Betrachten Sie zum Beispiel ein logger, logs jede Nachricht eine Sequenz-Nummer. Zwei Instanzen zu synchronisieren Ihrer Sequenz-Zähler, die verlangt, dass Sie knwp über einander, verhandeln Zähler erhöht und so weiter. (Die alternative mit gemeinsamen Zähler in ein statisches Mitglied einer Klasse ist, entspricht eine singleton logger)
Hängt davon ab, das logging-framework. In der Regel möchten Sie alle Nachrichten gehen, um ein Protokoll, so dass Sie wollen, dass alle code die gleichen logger. Aber der logger-Klasse nicht über ein singleton, um sicherzustellen, dass.