27

新しいLog4J2-JavaLoggingFrameworkを使用したいと思います。すべて正常に動作しますが、ログを構成するためのカスタム構成ファイル(ログレベルなど)を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ファイルを配置して、そのフォルダーをランタイムクラスパスに追加します。

公式ウェブサイトは私を助けることができないので、私がLog4j2を私の構成ファイルで動作させるのを手伝ってくれることを願っています。

4

7 に答える 7

36

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

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

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

構成セクションは良いリソースかもしれないように見えます。

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

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

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

指定した構成を前提として、以下のコードを実行すると、次のようになります。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");
    }
}
于 2012-11-05T15:59:49.937 に答える
3

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

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"
于 2015-05-08T21:13:57.337 に答える
2

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

log4j.configurationFile='xxxx/xxx/xxx'  
于 2013-10-08T15:29:36.753 に答える
1

私の2セント:

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

同じ問題が発生しましたが、テスト環境に問題がありました。

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

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

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がすでに設定されていることです(つまり、静的な最終ロガーログ= ...が最初に実行されます)。

私がしたことは、次のように@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セットアップを出荷しません。

それが役に立てば幸い

于 2013-08-15T18:15:10.090 に答える
0

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

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

ここでの完全な答え: log4j2-構成の問題

于 2013-11-09T11:50:25.603 に答える
0

これは、 「logconfファイルが読み取られているかどうかを確認しない」問題を解決するためのより貴重なヒントです。オプションを使用してjvmを起動します-Dlog4j.debug。起動すると、読み取ろうとするすべてのログ構成ファイルが出力されます。1つずつ一覧表示されます。最後に表示されるのは、システムが使用するものです。

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

于 2019-04-05T20:50:54.710 に答える
-4

LOG4J2.XMLをプロジェクトのルートフォルダーsrc/mainに配置します。

于 2013-05-20T00:37:07.053 に答える