2012-11-30 27 views
5

私はJavaでWebアプリケーションを作成し、ロギングにはSLF4Jを使用しています。SLF4J、毎回LoggerFactory.getLogger(MyClassName.class)を書くことを避けるため

私はロギングを使用するすべてのクラスについては、以下の行を書くのに疲れになっている:

private static final Logger logger = LoggerFactory.getLogger(ThisClassName.class); 

冗長なコードを避けるために、私はちょうど

interface Loggable { 
    Logger logger(); 
} 

のようなものや、各クラスすることができますを考えていますこのインタフェースを実装して、AOPのような魔法の一部にLoggerFactoryの部分を挿入します。

誰でもこれを実装しているか、これを達成する方法を知っていますか?

ありがとうございます!

答えて

12

eclipseを使用していますか?もしそうなら、なぜ単に「ロガー」およびそれのための次のテンプレートのようなキーワードでコードテンプレートを使用しない:

${:import(org.slf4j.LoggerFactory, org.slf4j.Logger)} 
private final static Logger LOGGER = LoggerFactory.getLogger(${enclosing_type}.class); 

あなただけの「ロガー」を入力し、この方法は、シフト + スペースをヒットし、あなたは終わった。

+0

を参照してくださいシンプルで仕事をしていません。そのような些細な問題のためだけにAOPを採用するのは夢中のアイコンです(特にあなたのプロジェクトがまだAOP用に構成されていない場合) –

0

AOPを使用したロギングは、Hereでうまく説明されています。 メソッド実行の詳細をログに記録するメソッドの中に、ロガーを動的に挿入する方法はありません。単体テストケースでそれを処理できます。 メソッド呼び出しのログは、AOP

1

CDIを使用していますか?その場合は、プロデューサメソッドを作成し、@ロガーをCDI対応のクラスに注入します。

@Produces Logger createLogger(InjectionPoint injectionPoint) { 
    return Logger.getLogger(injectionPoint.getMember().getDeclaringClass().getName()); 
} 

、正確http://docs.jboss.org/weld/reference/latest/en-US/html/injection.html#d0e1662

関連する問題