ビルドパスに_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の有効なメソッドではなくなったのはなぜですか。
Logger
がそのようなメソッドを宣言していないことに気付くでしょう。
log4jバージョン2では、大幅な変更が加えられています。 こちら 変更ログ。 getLogger
はLogManager
クラスに移動されたようです。
こちら 移行を提案する方法。
理解を深めるために例を挙げています。
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);
}
}
新しい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/
他の回答で述べたように、Logger
はインターフェースになり、LogManager
からLoggerインスタンスを取得できます。
APIは実装から分離され、ユーザーコードを壊すことなく実装を変更する自由をチームに提供します。 APIはめったに変更されません。変更された場合、2.0.xバージョンではなく2.xバージョンになります。そうは言っても、常に一致するlog4j-apiとlog4j-coreのバージョンを使用することをお勧めします。
Log4jバージョン2を使用しています。
private static final Logger LOGGER = LogManager.getLogger(TheClass.class);
クラスで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");
}