web-dev-qa-db-ja.com

XMLファイル(log4j2.xml)を使用してLog4j 2を構成する

新しいLog4J 2を使用したい-Java Logging Framework。すべて正常に動作しますが、ログを設定するためにカスタム設定ファイルをロードして1時間から試しました。

これは私のlog4j2.xmlです:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
  <appenders>
    <Console name="Console" target="SYSTEM_OUT">
      <PatternLayout pattern="%d{HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
    </Console>
  </appenders>
  <loggers>
    <root level="error">
      <appender-ref ref="Console"/>
    </root>
  </loggers>
</configuration>

私は次を試しましたが、何も動作しません:

  • Log4j2.xmlファイルを移動して、デフォルトパッケージに配置します。
  • プロジェクト内の任意の場所にlog4j2.xmlファイルを移動します
  • Log4j2.xmlファイルに「log4j.xml」という名前を付けます
  • プロジェクトにフォルダーを作成し、そこにlog4j2.xmlファイルを配置して、そのフォルダーをランタイムクラスパスに追加します

公式Webサイト は役に立たないので、Log4j 2を私の構成ファイルで動作させるのを手伝ってくれることを願っています。

26
Rubberducker

重要:構成ファイルの名前がlog4j2.xmlではなく2(ピリオドの前のlog4j.xmlに注意)であることを確認してください

エラーレベルを使用して何もログに記録されないため、私の推測では何も起きていません。次のように別のロガーを追加してみてください。

<logger name="com.foo.Bar" level="trace">
  <appender-ref ref="Console"/>
</logger>

Configuration セクションが適切なリソースのようです。

さらに詳しく説明するために、レベルを「エラー」に設定したロガーを指定しています。

<root level="error">
  <appender-ref ref="Console"/>
</root>

これは、Level.ERRORを使用して記録されたメッセージのみがログに表示されることを意味します。制限レベルの低いロガーを追加すると、より多くのメッセージをログに表示できます。マニュアルの Architecture セクションをご覧になることをお勧めします(ページを下にスクロールすると、ログレベルを説明する表が表示されます)。または、(新しいロガーを追加する代わりに)ルートロガーのレベルをトレースするように変更することもできます。

指定した構成を前提として、以下のコードを実行すると13:27:50.244 [main] ERROR com.example.Log4j2Tester - testing ERROR levelのようなものが生成されます

package com.example;

import org.Apache.logging.log4j.LogManager;
import org.Apache.logging.log4j.Logger;

public class Log4j2Tester {
    private static final Logger LOG = LogManager.getLogger(Log4j2Tester.class);

    public static void main(String[] args) {
        LOG.error("testing ERROR level");

//if you change the level of root logger to 'trace'
//then you'll also see something like
//    13:27:50.244 [main] TRACE com.example.Log4j2Tester - exiting application
        LOG.trace("exiting application");
    }
}
34
Andrey

ヒント:カスタムlog4jファイルを使用します。 (むしろデフォルトの「log4j2.xml」ということです)。場合によっては、複数の構成が役立つ場合があります。

Mavenを使用してlog4j2を構成する場合は、pom.xmlで必要なものを以下に示します。

                <systemProperties>
                    <property>
                        <name>/log4j.configuration</name>
                        <value>.../../Foo-log4j.xml</value>
                    </property>
                </systemProperties>

デフォルトでは、「log4j2.xml」が予想されるファイル名です。ただし、log4j.configurationシステムプロパティを設定することでこれをオーバーライドできます。上記の例では、カスタム構成ファイルを「Foo-log4j.xml」として使用しています。

CLIでも同じことができます。

-Dlog4j.configuration="Foo-log4j.xml"

クラスパスのルートフォルダーでデフォルトの構成ファイルlog4j2.xml(またはlog4j2-test.xml)を使用する以外に、このシステムプロパティを使用して構成ファイルのパスを指定できます(Javaコマンドライン)

log4j.configurationFile='xxxx/xxx/xxx'  
1
Shen liang

私の2セント:

ソフトウェアシステム:log4j 2、NetBeansおよびTestNG。

私も同じ問題を抱えていましたが、テスト環境に問題がありました。

デフォルト(つまり、src /にあるlog4j2.xmlファイル)では、ログレベルはerrorに設定されています。しかし、テストを実行するとき、ログをトレースする必要があります。そして、もちろん、多少ハードコーディングされたファイルに記録されます。

つまり、元々私は次のようなことをしました:

public class someTestClass {
       static final Logger log=LogManager.getLogger("test.someTestClass");
......
@Test
public void SomeMethod(){

System.setProperty("log4j.configurationFile", "resources/log4j2_conf.xml");

log.trace("This will not show because the default logging level is ERROR
and the resources/log4j2_conf.xml is not loaded");

}

問題は、System.setProperty命令が実行されるまでに、log4jがすでに設定されていることです(つまり、静的な最終Logger log = ...が最初に実行されます)。

私がしたことは、次のように@BeforeClassを使用することです。

 public class someTestClass {
    Logger log;      
    @BeforeClass
    public void setLogger(){
        SetEnv.SetEnvironment();
        log = LogManager.getLogger("TestRealClientRealServer");
    }
......
    @Test
    public void SomeMethod(){

        log.trace("This will show, because in log4j2_conf.xml
 the root level is set to TRACE");

    }
}

ところで、resources /はテストパッケージに配置できるので、「テスト」log4jセットアップを出荷しません。

それが役に立てば幸い

1
visoft

これは、"ログconfファイルが読み込まれている場合はそうではありません"問題を解決するための、より価値のあるヒントです。オプション-Dlog4j.debugを使用してjvmを起動します。起動すると、読み取ろうとするすべてのログ構成ファイルが印刷されます。 1つずつリストされます。最後に表示されるのは、システムが使用するものです。

JEEサーバーを使用している場合、おそらく「jvm.options」ファイルのどこかに置く必要があります。 jarファイルの場合は、Javaで-Dlog4j.debugを実行します。

0
neves

Eclipseユーザー向けのヒント:

プロジェクトを右クリックし、「更新」をクリックします。 Eclipseでlog4j2.xmlファイルが表示されることを確認します。

ここでの完全な回答: log4j 2-構成の問題

0
fstang