Wie bauen Ausnahme Logger System in PHP, die zum Beispiel unterschiedliche Logger-Implementierungen haben kann File / DB und ist prüfbar

StackOverflow https://stackoverflow.com/questions/4031552

Frage

Ich baue eine PHP-Bibliothek, die verschiedene benutzerdefinierte Ausnahmen auslöst, wenn es Fehler auftreten. Ich brauche diese Ausnahmen zu protokollieren und verschiedene Implementierungen der Logger bieten, so dass sie in einer Datei oder einer Datenbank protokolliert werden.

müssen Ausnahmen angemeldet sein, ob sie gefangen sind oder nicht, so dass umfasst nicht in einem benutzerdefinierten Exception-Handler jede dieser Implementierung. Deshalb braucht die Anmeldung selbst im Konstruktor der benutzerdefinierten Exception-Klassen ausgelöst werden.

ich auch Unit-Test benötigen, mit PHPUnit, dass die Ausnahme die Logger auslöst.

Was ist die beste Art und Weise der Exception-Objekte Zugriff auf das Objekt Logger mit?

Ideen / Anregungen Ich habe die folgenden:

1) Inject des gewählten Logger Implementierungsobjekt (oder es ist Mock-Objekt, wenn die Ausnahmeklassen Prüfung) in die Objekte, die die Ausnahmen werfen, und diese Objekte dann spritzen das Logger-Objekt in den Konstruktor, wenn jede neue Ausnahme zu werfen. Dies könnte ein bisschen chaotisch, obwohl mit dem Logger-Objekt überall herumgereicht wird.

2) Verwenden Sie die Strategie oder eine Fabrik Muster (Ich habe auf den Konzepten lesen, aber ich bin mir nicht sicher, wie diese in diesem Fall zu implementieren).

War es hilfreich?

Lösung

Das wäre

Ich denke, der Ansatz von Ausnahmen des Loggers mit stattdessen eine Ausnahme der Verwendung Handler fehlerhaft ist. IMO, verletzt er die Trennung von Bedenken und Ausnahmen sollten nicht Protokollierung Logik enthalten. Wenn Sie jedoch haben müssen, dass Sie eine benutzerdefinierte Exception erstellen könnte, die einen Logger-Verbund als statisches Element hat, aber das würde Sie noch verlassen ohne die Protokollierung für alle Ausnahmen nicht von dieser Ausnahme subclassed. Sie könnten das Verhalten von PHP-Basis Exception ändern mit runkit aber das ist schmutzig schwarzer Voodoo Magie monkeypatching.

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