Log4j2構成-log4j2構成ファイルが見つかりません


91

最近、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ファイルは直接日食のプロジェクトフォルダーにあります。


2
ドキュメントのサイスは、それだけでクラスパス上になければなりません。それは...ですか?
Fildor 2014

ええ、私はそれを逃した。愚かな質問と感謝のため申し訳ありません:)
Qbisiek '25

回答:


139

これはMavenなどのない単純なEclipse Javaプロジェクトですか?その場合、クラスパスでlog4j2.xmlファイルsrcを見つけることができるように、ファイルをフォルダーの下に置く必要があります。mavenを使用する場合はsrc/main/resourcessrc/test/resources


4
私のヒーロー!私はクラスパスに構成ファイルを持っていると思いますが(おそらく)、srcフォルダーにはありませんでした。私はそこにそれを移動しました、そしてそれは現在働いています!
Shadoninja 2016年

Mavenプロジェクトでどのように構成されますか?(私がクラスパスの下に「log4j2.xml」を置くと私が機能すると思うので、mavenの方法のように)、ヒントをありがとう:)
エンリケサンマルティン

log4j2.xmlは私のsrc(mavenのないJavaFXプロジェクト)にありますが、見つかりません。これは複雑すぎますか?!?!:(
Ewoks

2
以下のために行くにも。sbtlog4j2.xmlsrc/main/resources
Akavall

このファイルlog4j2.xmlが見つかりません
Karthiga

32

次のソリューションのいずれかを選択する必要があります。

  1. log4j2.xmlファイルをプロジェクトのリソースディレクトリに配置して、log4jがクラスパスの下のファイルを見つけられるようにします。
  2. システムプロパティ-Dlog4j.configurationFile = file:/path/to/file/log4j2.xmlを使用します

1
-Dlog4j.configurationFile私が取り組んでいるプロジェクトはMavenベースではないので、私が必要とするものです。恐ろしい
キムチマン

15

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の2.8.1バージョンの場合、このリンクを参照して、log4j-apijackson-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);
 }


3

IDEを強制的に更新するまで、Eclipseはファイルを表示しません。その特徴!したがって、プロジェクト全体にファイルを配置すると、Eclipseはそれを完全に無視し、これらのエラーをスローします。Eclipseプロジェクトビューで更新を押すと、機能します。


0

私の場合、クラスパスがsrcフォルダーに設定されていても、プロジェクトのbinフォルダーに配置する必要がありました。理由はわかりませんが、試してみる価値はあります。


これは、プロジェクトが構成を含むフォルダーがリソースフォルダーであることを認識しないため、ビルドの一部としてファイルが自動的にコピーされないことを示唆しています。最終的にはbinフォルダーにコピーされないソースに変更を加え、最終的には変更が機能しない理由を疑問に思うようになるため、これをさらに検討することをお勧めします。
サラフィリップス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.