2016-06-13 15 views
0

SLF4JのLogger APIを拡張し、AppLoggerインターフェイスを作成しました。私がここで開示することができない特定の必要性のためにこれを行わなければなりません。ここでは、この拡張ロガーをLogBackフレームワークで使用したいと考えています。私はそれを動作させる方法を見つけることができません。直接の使用はClassCastExceptionを投げています(これは、名前がLoggerで、AppLoggerのクラスを予期しているため、明らかです)。拡張SLF4Jをログバックで使用する方法

ブリッジ実装を作成し、カスタムのStaticBinderクラスを提供することで、この拡張インタフェースをLog4J 1.xLog4J 2.xで動作させることができました。 LogBackの場合、このブリッジクラス(StaticBinder)はlogback-classic JARファイルの一部なので、自分のバインダとLogBackの作成方法はわかりません。

AppLoggerインタフェースは次のようになります。誰もが任意のアイデアを提供する場合

public interface AppLogger extends org.slf4j.Logger { 
    public void myOwnMethod(String message, Object... args); 
} 

は感謝しています。

+0

@ Raedwald、私は自分の質問を編集して拡張インターフェースを追加しました。アプリケーション固有のロギング方法をいくつか追加する必要があります。私はまた、LogBackを拡張するというあなたの点を理解しています。私は、 'AppLogger'を拡張する' ch.qos.logback.classic.Logger'と同等の実装を提供しなければならないことを知っていますが、その場合、 'logback-classic'にあるすべてのクラスのコードを提供しなければなりませんJAR。私は他の考えを考えることができません。あなたは別の考えを持っていることを親切にお勧めします。 – Niranjan

+1

マーカやMDCなどの組み込みメカニズムでは不可能なことを行うために、Loggerのコアインタフェースを拡張する必要があるのはなぜか想像できません。おそらく、Loggerインターフェースを採用せず、すべてのクラスを静的にインポートする独自のメソッドを提供する方が良いでしょう。 –

答えて

2

バージョン1.7.15までSLF4Jバインディング機構は非常に非常に簡単でした。バージョン1.7.15以降、イベントリプレイの導入に伴い、メカニズムは少し複雑になりましたが、コアバインドの考え方は単純なままです。さらに、悩まされない人にとって、イベントリプレイのサポートは、安全に省略することができます。

slf4jバインディングの例については、slf4j-nopまたはslf4j-simpleモジュールのコードを参照してください。

しかし、私が収集したものから、拡張Logger APIを使用したい場合、slf4j-extモジュールのLoggerWrapper,XLoggerおよびXLoggerFactoryクラスを調べる必要があります。 AppLoggerインターフェイスで同じ手順を簡単にエミュレートできるはずです。

関連する問題