5

Java で Web アプリケーションを作成しており、ロギングに SLF4J を使用しています。

ロギングを使用するすべてのクラスに対して以下の行を書くのにうんざりしています。

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

冗長なコードを避けるために、私は次のようなことを考えています

interface Loggable {
    Logger logger();
}

各クラスはこのインターフェイスを実装するだけで、AOP のようないくつかの魔法がLoggerFactoryパーツを挿入します。

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

ありがとう!

4

4 に答える 4

12

Eclipseを使用していますか?もしそうなら、「logger」のようなキーワードとそのための次のテンプレートを含むコードテンプレートを使用しないのはなぜですか。

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

この方法では、「logger」と入力し、shift+spaceを押すだけで完了です。

于 2012-11-30T09:03:48.323 に答える
2

Are you using CDI? if so, create a producer method and then @Inject the logger to any CDI enabled class.

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

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

于 2013-10-30T18:49:13.493 に答える
0

AOP を使用したロギングは、Here で適切に示されています。メソッド実行の詳細をログに記録するために、メソッド内にロガーを動的に挿入する方法はないようです。単体テストケースはそれを処理できます。メソッド呼び出しのログ記録は AOP で処理できます

于 2012-11-30T09:05:24.043 に答える
0

クラスで @Slf4j アノテーションを使用している場合、lombok はデフォルトで変数「log」を生成します

@Slf4j
public class YourClass {
    public void someMethod() {
        log.error("Test log");
    }
}

リンクを参照してください https://github.com/mplushnikov/lombok-intellij-plugin/issues/154#issuecomment-163940867

于 2018-10-17T10:22:13.950 に答える