web-dev-qa-db-ja.com

log4j2構成ファイルが見つかりません。デフォルト構成の使用:エラーのみをコンソールに記録する

$ Java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar

コンソールに書かれて、あなたは得る

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

しかし、構成ファイルが見つかり、解析可能でなかったようにも見えます:

    log4j:WARN Continuable parsing error 2 and column 31
    log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".
    log4j:WARN Continuable parsing error 2 and column 31
    log4j:WARN Document is invalid: no grammar found.
    log4j:ERROR DOM element is - not a <log4j:configuration> element.
    log4j:WARN No appenders could be found for logger (kafka.utils.VerifiableProperties).
    log4j:WARN Please initialize the log4j system properly.
    log4j:WARN See http://logging.Apache.org/log4j/1.2/faq.html#noconfig for more info.
47
Jeff Maass

私はしばらくこの問題に取り組んできました。この投稿で説明されているようにすべてを変更しましたが、エラーが発生したとさえ考えました。その場合は、.xmlまたは.propertiesファイルの設定を変更するときにプロジェクトを必ず削除してください。 Eclipse環境。 [プロジェクト]-> [クリーン]を選択します

4
Phatee P

問題1

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.

解決策1

「log4j2」として知られるlog4jのバージョン2を使用するには

-Dlog4j.configuration=

読むべき

-Dlog4j.configurationFile=

問題2

log4j:WARN ....

解決策2

プロジェクトで、log4j-1.2 jarをアンインクルードし、代わりにlog4j-1.2-api-2.1.jarをインクルードします。 log4j 1.2を正確に除外する方法がわかりませんでした。私のプロジェクトの依存関係がそれを必要としていることを知っていました。ですから、少し読んで、たくさんのものを除外しました。

<dependency>
    <groupId>org.Apache.kafka</groupId>
    <artifactId>kafka_2.10</artifactId>
    <version>0.8.2.0</version>
    <exclusions>
        <exclusion>
            <groupId>org.Apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>                
        </exclusion>
        <exclusion>
            <groupId>org.Apache.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>          
    </exclusions>
</dependency>

どの除外がトリックを行ったかはわかりません。それとは別に、2.xにブリッジする1.2 APIへの依存関係を含めました。

<!--
    http://logging.Apache.org/log4j/2.0/manual/migration.html
    http://logging.Apache.org/log4j/2.0/maven-artifacts.html
    Log4j 1.x API Bridge
    If existing components use Log4j 1.x and you want to have this logging
    routed to Log4j 2, then remove any log4j 1.x dependencies and add the
    following.
-->
<dependency>
    <groupId>org.Apache.logging.log4j</groupId>
    <artifactId>log4j-1.2-api</artifactId>
    <version>2.2</version>
</dependency>

これで、コンソールにのみ送られていた1.2ログは、実際には2.xアペンダーに流れます。

55
Jeff Maass

クラスパスにlog4j-1.2.jarの運勢が Renkoのコメントで指摘されている がない場合、メッセージno log4j2のみが表示されます。構成ファイルが見つかりました

構成ファイルにエラーがある場合、これは問題です。起動時に問題の場所がわからないためです。

たとえば、log4j2の処理に失敗するlog4j2.yamlファイルがある場合、たとえば、 プロジェクトにYAMLパーサーを設定していない 、または設定が単純に間違っているためです。 no log4j2 configuration file foundメッセージが表示されますが、詳細情報はありません。これは、log4j2が 見つかった最初の構成ファイルの処理を試みる のみであるため、有効なlog4j2.xmlファイルがある場合でも当てはまります。

問題をデバッグするための最良の方法は、 上記 のコマンドライン引数に従って、使用する設定ファイルを明示的に指定することです。

-Dlog4j.configurationFile=

これが、クラスローダーがlog4j2構成ファイルまたは構成内の他の何かを見つけられないことが実際に原因であるかどうかを特定するのに役立つことを願っています。

更新

以下のプロパティを使用して、ステータスロガーのデフォルトレベルを変更し、詳細情報を取得することもできます。

-Dorg.Apache.logging.log4j.simplelog.StatusLogger.level=<level>
11
Conor Svensson

Java mavenプロジェクトでHive jdbcを使用していますが、同じ問題があります。

私の方法は、src/main/Java/resourcesの下にlog4j2.xmlファイルを追加することです

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyClassName {
    private static final Logger LOG = LoggerFactory.getLogger(MyClassName.class);
}

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration 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="<your_package_name>.<your_class_name>" level="debug">
        <AppenderRef ref="Console"/>
        </Logger>
        <Root level="WARN">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>
6
LuQQiu

私は同じ問題を抱えていましたが、この問題についてネットで読んだ後、プロジェクトにlog4j2.xmlがないことに気づいたので、メモ帳で関連コードをコピーし、メモ帳ファイルをxmlに戻し、プロジェクトに追加しますフォルダーリソース。わたしにはできる。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration 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>
<Root level="DEBUG">
  <AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>
5
kykbr

ロギングを確認するためにチェックするもの、

1)他のlog4jバージョンがないことを確認します。

mvn dependency:tree | grep log ## ./gradlew dependencies | grep log
[INFO] +- com.prayagupd:log-service:jar:1.0:compile
[INFO] +- org.Apache.logging.log4j:log4j-api:jar:2.6.2:compile
[INFO] +- org.Apache.logging.log4j:log4j-core:jar:2.6.2:compile
[INFO] |  \- commons-logging:commons-logging:jar:1.1.1:compile

2)log4j2.jsonを適切に設定していることを確認します。これは-Dlog4j.configurationFile = ???で行います。

val logConfig: PropertiesConfiguration = new PropertiesConfiguration("application.properties")
System.setProperty("log4j.configurationFile", logConfig.getString("log4j.config.file"))

println("log4j.configurationFile :: " + System.getProperty("log4j.configurationFile"))

または

Configurator.initialize(null, logConfig.getString("log4j.config.file"));

また、自動検出が行われている場合、ファイル名がlog4j。*ではなくlog4j2。*であることを確認してください

3)もう1つのチェックは、log4j2.jsonのパーサーです。 API内でパーサーを提供していないlog4jチームに感謝します。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.4.0</version>
</dependency>

JSONパーサーが見つからない場合、これは例外をスローする可能性があります

[Fatal Error] log4j2.json:1:1: Content is not allowed in prolog.
2
prayagupd

Srcフォルダーからlog4j2ファイルが削除されたため、このエラーが発生しています。

Srcフォルダーの下にxmlファイルを追加するだけです

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
    </Console>

    <RollingFile name="RollingFile" filename="logs/B2CATA-hybrid.log"
        filepattern="${logPath}/%d{yyyyMMddHHmmss}-fargo.log">
        <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" />
        <Policies>
            <SizeBasedTriggeringPolicy size="100 MB" />
        </Policies>
        <DefaultRolloverStrategy max="20" />
    </RollingFile>

</Appenders>
<Loggers>
   <Logger name="com.pragiti." level="trace" />
    <Root level="info">
        <AppenderRef ref="Console" />
        <AppenderRef ref="RollingFile" />
    </Root>
</Loggers>
2
komal sarode

私の場合、私のgradleプロジェクトのクラスパスでlog4j2 Jsonファイルlog4j2.jsonを使用していますが、同じエラーが発生しました。

ここでの解決策は、JSON処理の依存関係を私のgradle依存関係に追加することでした。

compile group:"com.fasterxml.jackson.core", name:"jackson-core", version:'2.8.4'
compile group:"com.fasterxml.jackson.core", name:"jackson-databind", version:'2.8.4'
compile group:"com.fasterxml.jackson.core", name:"jackson-annotations", version:'2.8.4'

log4j2のドキュメント も参照してください:

JSONサポートでは、Jackson Data Processorを使用してJSONファイルを解析します。これらの依存関係は、構成にJSONを使用するプロジェクトに追加する必要があります。

1
H6.

ビルドパスを構成することにより、この問題を解決しました。ここに私が従ったステップがあります:Eclipseで。

  1. フォルダーを作成し、その中にlogj4ファイルを保存します。
  2. 作成されたフォルダーをクリックして書き込み、ビルドパスに移動します。
  3. フォルダーの追加をクリックします
  4. 作成されたフォルダーを選択します。
  5. [OK]をクリックし、[適用して閉じる]をクリックします。

今、あなたは実行することができるはずです

0
Alex Santos

これは、Webサーブレットで実際のlog4j2構成ファイルが見つかる前にスローされることがあります。少なくとも私の場合はそう思う。 Cuzはすでにweb.xmlにあります

  <context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>classpath:log4j2-app.xml</param-value>
  </context-param>

そして、log4j-webソースをチェックします;クラスで

org.Apache.logging.log4j.web.Log4jWebInitializerImpl

行があります。

String location = this.substitutor
                 .replace(this.servletContext.getInitParameter("log4jConfiguration"));

これらはすべて、構成が見つかる前の一時的なログであると考えさせられます。

0
Olgun Kaya

log4j2.*フォルダーの下にlog4j.*ファイルの代わりに.../src/main/resourcesファイルを配置したことを確認してください。

0
Zvonko