15

ログを報告するようにlog4j2.0を構成しようとしています。

私の設定はlog4j2.xmlとして保存され、これがその内容です。

  <?xml version="1.0" encoding="UTF-8"?>
  <configuration name="PRODUCTION" status="OFF">

    <appenders>
        <RollingFile name="MyFileAppender" 
            fileName="../Logs/app.log" 
            filePattern="../Logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
            <PatternLayout>
                <pattern>%d %p %C{1.} [%t] %m%n</pattern>
            </PatternLayout>
            <Policies>
                <OnStartupTriggeringPolicy />
                <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
                <SizeBasedTriggeringPolicy size="250 MB"/>
            </Policies>
        </RollingFile>
    </appenders>

    <loggers>
        <root level="trace">
            <appender-ref ref="MyFileAppender"/>
        </root>
    </loggers>

 </configuration>

プロジェクトのクラスパスに存在し、他の多くのディレクトリに配置してみました。

私は次のようなコードでロガーを作成しました:

    Logger          logger = LogManager.getLogger(MyClass.class.getName());
    logger.info("test");

そして、何も書き込まれず、ファイルも作成されません。コードをデバッグすると、ロガーがデフォルトのロガー(コンソール)であることがわかります。

4

12 に答える 12

12

log4j2.xmlファイルを。の下に配置しますsrc/main/resources。できます

于 2015-04-01T08:52:22.393 に答える
11

実際、これは簡単なプロセスです。Log4j 2の2つの主要なクラスは次のとおりであり、次のようにインポートする必要があります。

    import org.apache.logging.log4j.LogManager
    import org.apache.logging.log4j.Logger

Logger次に、このコードを使用してインスタンスを取得します。

    private static final Logger logger = LogManager.getLogger();

メソッドにクラス名をパラメーターとして指定しなかったことに注意getLogger()してください。Log4j2は自動的にそれを把握します。

これで、クラスの任意のinfo(), trace(), debug(), warn(), error(), fatal()メソッドを使用できます。Loggerただし、これらすべてのメソッドから出力を取得するには、XML構成ファイルが必要です。デフォルトでは、Log4j2はerror() and fatal()メソッドからの出力のみを生成します。

構成ファイルは次のとおりです。

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
        <Appenders>
            <File name="MyCustomLogFile" fileName="/home/me/mylogfile.log">
                <PatternLayout>
                    <Pattern>%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Pattern>
                </PatternLayout>
            </File>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </Console>
        </Appenders>
        <Loggers>
            <Root level="all">
                <AppenderRef ref="MyCustomLogFile"/>
                <!--<AppenderRef ref="Console"/>-->
            </Root>
        </Loggers>
    </Configuration>

このファイルを任意の名前で任意の場所に保存します。名前としてLog4j2.xmlを使用します。次に、このファイルをクラスパスに配置する必要があります。これは、プログラムの実行時に次のようにシステムプロパティを渡すことで実行できます。

    java -Dlog4j.configurationFile=/path/to/xml/configuration/file/Log4j2.xml MyMainClass

そして、あなたはそれをしました。ロギングはすぐにコンソールに表示されます。

特記事項:

  • XMLファイルでは、ファイルとコンソールの2つのアペンダーを提供しました。AppenderRefコンソールではなくファイルで出力を取得するには、コメント付きタグのコメントを解除する必要があることがわかります。

  • システムプロパティとして環境変数を指定することもできます。Log4j 2は、最初に環境変数から構成ファイルを読み取り、環境変数-Dが見つからない場合は引数で読み取ります。

ロギングを楽しんでください。:-)

于 2014-08-08T04:23:31.187 に答える
4

プロジェクトのクラスパスに存在し、他の多くのディレクトリに配置してみました。

正確にはどこで?「クラスパス内」がどこを意味するかについては、しばしば混乱が生じます。どこにでもあることはできません。'top'または'defaultpackage'にある必要があります。

src
├── main
│   └── java
│       ├── com
│       │   └── example
│       └── log4j2.xml
于 2013-02-06T16:50:23.757 に答える
4

log4j2.xmlをクラスパスに入れる必要があります。

または、「log4j.configurationFile」システムプロパティを設定して、log4j2.xmlの使用を強制します

参照してください:http://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticConfiguration

于 2013-02-06T16:42:45.337 に答える
3

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

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

冗長にするために:

  • ビルドパスにファイルを追加しないでください(追加すると、eclipseはこれについて警告します)

  • このファイルの名前は「.classpath」ファイルに表示されません。

  • log4j2.xmlをsrc/ディレクトリに置きました。できます。
于 2013-11-09T11:46:46.087 に答える
1

メッセージをログに記録したいクラスの完全修飾名を書き留める必要があると確信しています。たとえば、 com.application.log4jtest.YourClass。それでも問題が解決しない場合は、ログレベルをいじってみてください。

また-通知として-あなたはまた書くことができます

Logger logger = LogManager.getLogger(MyClass.class); // omit .getClass()
于 2013-02-06T16:36:56.493 に答える
1

私も同様の問題を抱えていました。ファイルをsrcフォルダーに入れて、動作しました。log4j2.xmlファイルにはパッケージ名については触れていません。

于 2013-09-13T20:59:31.970 に答える
1

log4j 2のドキュメント:http://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticConfiguration

「JSONファイルが見つからない場合、XMLConfigurationFactoryはクラスパスでlog4j2.xmlを見つけようとします。」

ただし、クラスパスでは機能しません。代わりに、それをsrcフォルダーに保持すると、機能します。

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

同様の問題がここに記載されています:https ://issues.apache.org/jira/browse/LOG4J2-357

于 2013-10-30T06:26:42.540 に答える
1

私は問題を抱えていました、私はいくつかの解決策を試しました、しかしこれだけが私に働きました:

web.xmlに移動し、次のパラメーターを追加します。

<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>log4j2.xml</param-value>
</context-param>
于 2014-05-19T03:53:24.003 に答える
0

私も同じ問題に直面しました。log4j2.xmlファイルをシステム環境変数に保持しました。

変数名:sys_logroot変数値:D:\ user \ gouse

ログは作成されません。

システム変数を使用する-Dlog4j.configurationFile=path/to/log4j2.xmlここを参照

これは私の問題を解決します

于 2015-02-26T13:48:10.943 に答える
-1

わかりました、問題を解決しました。xmlでpackage="myPackage"を指定する必要がありました

于 2013-02-07T13:42:40.973 に答える
-1

同じ'ERRORStatusLoggerがありましたlog4j2構成ファイルが見つかりません。デフォルト設定の使用:エラーのみをコンソールに記録します。何度も何度もメッセージ。それは私を夢中にさせました。log4j2.xmlファイルは、以前の何千ものプロジェクトで行ったように、src / main/resourcesに正しく配置されました。

私の場合の解決策は、ルートpom.xmlから<packaging> pom</packaging>を削除することでした。pomをパッケージ化すると、src / main/resourcesのコンテンツがtarget/classesにコピーされなくなります。

同じ根本原因を持つ人のための幸せなロギング。

于 2018-10-16T18:29:21.367 に答える