エラーが発生したときにさまざまなカスタム例外をスローするPHPライブラリを構築しています。これらの例外をログに記録し、ファイルまたはデータベースに記録できるように、ロガーのさまざまな実装を提供する必要があります。
例外は、キャッチされているかどうかに関係なくログに記録する必要があるため、カスタム例外ハンドラーにこれを実装することはできません。したがって、カスタムExceptionクラス自体のコンストラクターでロギングをトリガーする必要があります。
また、phpUnitを使用して、例外がロガーをトリガーすることを単体テストする必要があります。
LoggerオブジェクトにアクセスできるExceptionオブジェクトの最良の方法は何ですか?
私が持っていたアイデア/提案は次のとおりです。
1)選択したロガー実装オブジェクト(または例外クラスをテストする場合はMockオブジェクト)を例外をスローするオブジェクトに挿入します。これらのオブジェクトは、新しい各例外をスローするときにコンストラクターにロガーオブジェクトを挿入します。Loggerオブジェクトがいたるところに渡されているため、これは少し厄介になる可能性があります。
2)戦略またはファクトリパターンを使用します(概念については読みましたが、この場合、これらを実装する方法がわかりません)。