最近、log4j2ロガーの使用方法を学ぶことにしました。必要なjarファイルをダウンロードし、ライブラリ、xml構成ファイルを作成して、使用しようとしました。残念ながら、コンソール(Eclipse)でこのステートメントが表示されます。
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
これは私のテストクラスコードです。
package log4j.test;
import org.Apache.logging.log4j.LogManager;
import org.Apache.logging.log4j.Logger;
public class Log4jTest
{
static final Logger logger = LogManager.getLogger(Logger.class.getName());
public static void main(String[] args) {
logger.trace("trace");
logger.debug("debug");
logger.info("info");
logger.warn("warn");
logger.error("error");
logger.fatal("fatal");
}
}
そして私のXML設定ファイル:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test"
status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="log4j.test.Log4jTest" level="trace">
<AppenderRef ref="Console"/>
</Logger>
<Root level="trace">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
また、<Logger>
タグなしのxml、パッケージ仕様、およびさまざまなフォルダー/パッケージディレクトリで試してみましたが、役に立ちませんでした。これで、私のlog4j2.xml
ファイルはEclipseのプロジェクトフォルダーに直接配置されます。
これはMavenなどのないシンプルなEclipse Javaプロジェクトですか?その場合、クラスパス上で見つけることができるようにするには、src
フォルダーの下にlog4j2.xml
ファイルを配置する必要があります。 mavenを使用する場合は、src/main/resources
またはsrc/test/resources
の下に配置します
次の解決策のいずれかを選択する必要があります。
Yamlを使用してlog4j2を設定する際に、ドキュメンテーションに従っていました- Apache Log4j2 Configuratoin および Apache Log4j2 Maven ドキュメントによると、次のMaven依存関係が必要です。
<dependency>
<groupId>org.Apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.8.1</version>
</dependency>
<dependency>
<groupId>org.Apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.1</version>
</dependency>
そして
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.8.6</version>
</dependency>
これらを追加するだけでは構成が選択されず、常にエラーが発生しました。 デバッグ設定 の方法は、-Dorg.Apache.logging.log4j.simplelog.StatusLogger.level=TRACE
を追加することでログを見るのに役立ちました。後でMavenを使用してソースをダウンロードする必要があり、デバッグはlog4j2の依存クラスの理解に役立ちました。それらはorg.Apache.logging.log4j.core.config.yaml.YamlConfigurationFactory
にリストされています:
com.fasterxml.jackson.databind.ObjectMapper
com.fasterxml.jackson.databind.JsonNode
com.fasterxml.jackson.core.JsonParser
com.fasterxml.jackson.dataformat.yaml.YAMLFactory
jackson-dataformat-yaml
の依存関係マッピングを追加しても、最初の2つのクラスはありません。したがって、jackson-databind
依存関係を追加して、yaml設定を機能させます。
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.6</version>
</dependency>
MVNリポジトリ のTest Dependencies
バージョン項目のlog4j-api
セクションを参照して、バージョンを追加できます。例えば。 log4j-apiの2.8.1バージョンについては、この link を参照して、jackson-databind
バージョンを見つけてください。
さらに、以下のJavaコードを使用して、クラスパスでクラスが使用可能かどうかを確認できます。
System.out.println(ClassLoader.getSystemResource("log4j2.yml")); //Check if file is available in CP
ClassLoader cl = Thread.currentThread().getContextClassLoader(); //Code as in log4j2 API. Version: 2.8.1
String [] classes = {"com.fasterxml.jackson.databind.ObjectMapper",
"com.fasterxml.jackson.databind.JsonNode",
"com.fasterxml.jackson.core.JsonParser",
"com.fasterxml.jackson.dataformat.yaml.YAMLFactory"};
for(String className : classes) {
cl.loadClass(className);
}
IDEを強制的に更新するまで、Eclipseはファイルを参照しません。その機能!そのため、プロジェクト全体にファイルを配置すると、Eclipseはそれを完全に無視し、これらのエラーをスローします。 Eclipseプロジェクトビューで更新をクリックすると、動作します。
Tomasz Wが書いたことに加えて、アプリケーションを起動することで設定を使用できます:
-Dorg.Apache.logging.log4j.simplelog.StatusLogger.level=TRACE
構成の問題のほとんどを取得します。
詳細については、Log4j2 FAQを参照してください。 構成をデバッグするにはどうすればよいですか?
私の場合、クラスパスがsrcフォルダーに設定されていても、プロジェクトのbinフォルダーに配置する必要がありました。理由はわかりませんが、試してみる価値はあります。