2

SNMP を介していくつかのデバイスと通信するための PHP5.3 ライブラリを作成しました。私がやりたかった次の部分は、デバッグやエラー処理などを容易にするために、それを実装しようとしている会社の部門がクラスにロガーをアタッチできるようにすることです..

これを行う方法に関する一般的な慣行、標準、または規則はありますか? Monolog、Zend_Log、Analog などの任意のロガーを接続できるように、ソリューションを可能な限り柔軟にしたいと考えています。

私は、共通の API、オブザーバー パターン (ロギングのみが必要なため、やり過ぎで柔軟性がありすぎる可能性があります) を強制するインターフェイスを作成する方向で考えています...

tl;dr
ロギングを抽象化し、実装者が選択したロガーシステムに委任するライブラリにAPIを実装する方法に関するルールまたはパターン、およびできれば例がありますか。

4

2 に答える 2

1

それが Facade パターンであり、すべてはインターフェイスによってのみ公開されるべきです。私は似たようなもの、共通のログ インターフェイスを実装しました (ただし、C# にあります)。ほとんどの場合、ILog インターフェイスを定義してから、実際のログ サービスをラップする「ドライバー」を実装します。

コンシューマーはロガー (LogerFactory::GetLog()) を要求するだけで、ロガーがシングルトンであっても問題ないと思うので、ファクトリは常に同じインスタンスを返します。

一度に異なるロギング サービスを使用したい場合 (たとえば、ファイルに保存するサービスと、データベースに保存するサービスなど) は、オブザーバーと責任の連鎖がここで非常にうまく機能します。しかし、それはすべて機能に依存します。少なくとも、ILog インターフェイスとその特定の実装のみが含まれています。

于 2012-06-14T12:14:38.290 に答える
1

アダプターのパターン。具体的には、オブジェクト アダプターです。異なる Logger システムは異なるインターフェイスを意味し、アプリケーションはこれらすべてのシステムで動作できる必要があります。GOF による "Design Patterns" book の Pluggable Adapters をご覧ください。

于 2012-06-14T14:13:31.443 に答える