web-dev-qa-db-ja.com

メソッドgetLogger()はlog4j2のLoggerのメンバーではなくなりましたか?

ビルドパスに_log4j-api-2.0.0.jar_および_log4j-core-2.0.2.jar_をインポートしています。しかし、どういうわけか次のコードは失敗しました:

_import org.Apache.logging.log4j.core.Logger;

public class TheClass {

    private static Logger log = Logger.getLogger(TheClass.class);

...
_

そしてエラーメッセージはそれを示しています:

The method getLogger(Class<TheClass>) is undefined for the type Logger

getLogger()がLoggerの有効なメソッドではなくなったのはなぜですか。

21
huahsin68

Logger がそのようなメソッドを宣言していないことに気付くでしょう。

log4jバージョン2では、大幅な変更が加えられています。 こちら 変更ログ。 getLoggerLogManagerクラスに移動されたようです。

こちら 移行を提案する方法。

26

理解を深めるために例を挙げています。

private static Logger logger;
        static {
            try {   
                   // you need to do something like below instaed of Logger.getLogger(....);
                    logger = LogManager.getLogger(ResourceService.class); 
              } catch (Throwable th) {
                    throw new HRException("Cannot load the log property file", th);
            }
        }
9
RajeeV VenkaT

新しいLog4J 2では、少なくとも(私の場合)log4j-core-2.8.2、log4j-api-2.8.2を追加する必要があり、他の場合にはlog4j-web-2.8.2も追加する必要がある場合があります。したがって、ログを取得する場合は、_import org.Apache.logging.log4j.LogManager; import org.Apache.logging.log4j.Logger;_をインポートします

そして最後に使用法はstatic final Logger LOGGER = LogManager.getLogger(WebService.class.getName());になります

注:設定ファイルをプロジェクトのルートディレクトリに配置することを忘れないでください。そうしないと、ログを取得できません。

これが誰かに役立つことを願っています

はい、あなたの観察は正しいです。それはgetLogger()メソッドをサポートしていません。

このドキュメントのリンクを確認してください: http://logging.Apache.org/log4j/2.x/log4j-core/apidocs/index.html

サンプルチュートリアル: http://www.javabeat.net/log4j-2-example/

2
pd30

他の回答で述べたように、Loggerはインターフェースになり、LogManagerからLoggerインスタンスを取得できます。

APIは実装から分離され、ユーザーコードを壊すことなく実装を変更する自由をチームに提供します。 APIはめったに変更されません。変更された場合、2.0.xバージョンではなく2.xバージョンになります。そうは言っても、常に一致するlog4j-apiとlog4j-coreのバージョンを使用することをお勧めします。

2
Remko Popma

Log4jバージョン2を使用しています。

private static final Logger LOGGER = LogManager.getLogger(TheClass.class);
1
Pranav V R

クラスでgetLogger()メソッドを使用するには、Loggerクラスをインポートします

import Java.util.logging.Logger;

次のように使用します

public class SpringBoot {
  private static final Logger LOGGER = Logger.getClass("SpringBoot");
}

そして、このメソッドは文字列引数を取ります。

またはLogger from org.Apache.log4jパッケージを以下のように使用します

import org.Apache.log4j.Logger;

public class MessageProcessor {

private static final Logger LOGGER = Logger.getLogger(MessageProcessor.class);

public void processMessage(Message<String> msg) {
    LOGGER.info("Message is about to be processed");
}
0
tadtab