13

1 つの log4j.xml 構成が必要で、アプリケーションの開発中にコンソールにログを記録できるようにしたいと考えています。環境にデプロイしたら、コンソールではなくファイルアペンダーにのみログを記録したいと考えています。どうすればこれを達成できますか?

これは私の現在の設定です:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="DEBUG" />
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <appender name="LogFileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${log-base-dir}/${adapter-name}.log" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="MaxBackupIndex" value="99" />
        <param name="append" value="true" />        
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="info" />
        <appender-ref ref="ConsoleAppender" />
        <appender-ref ref="LogFileAppender" />
    </root>

</log4j:configuration>
4

3 に答える 3

11

ThresholdアペンダーのパラメーターとJVMシステム プロパティを使用して簡単に実行できます。例えば

<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    <param name="Threshold" value="${my.console.level}" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d %-5p [%c{1}] %m%n" />
    </layout>
</appender>

次に、製品でアプリケーションを起動するときに使用します-Dmy.console.level=OFF

ローカル使用開始と同時に-Dmy.console.level=ALL

OFFとは両方ともALL有効な log4j レベルです。

于 2014-11-21T21:23:24.137 に答える
11

解決策の 1 つは、開発環境 と運用環境で log4j 構成ファイルを分離することです。

  • log4j-development.xml- 開発環境用
  • log4j-production.xml- 本番環境用

次に、アプリケーションの起動コマンドに、log4j 構成ファイルを指定するパラメーターを含めることができます。java -Dlog4jconfig=log4j-development.xml -jar Application.jar

log4jconfigコードでプロパティの値を取得することにより、log4j を構成できますSystem.getProperty("log4jconfig")

このソリューションの利点は次のとおりです。

  • ロガーを個別に指定できます(開発中およびConsoleAppender本番環境のみ)LogFileAppenderLogFileAppender
  • 環境ごとにログ レベルを指定できます (error本番環境とdebug開発環境など)。
  • ファイルロガーを個別に構成できます。たとえば、本番環境で X 日間ログを保持し (監査目的など)、開発環境ではログファイルを 1 つだけにするなどです。

そのパターンは、複数の環境 (開発、UAT、ステージング、本番など) を持つ多くのアプリケーション サーバーで使用されます。

の例log4j-development.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="DEBUG" />
        <param name="Target" value="System.out" />
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="debug" />
        <appender-ref ref="ConsoleAppender" />
    </root>

</log4j:configuration>

の例log4j-production.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

    <appender name="LogFileAppender" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="${log-base-dir}/${adapter-name}.log" />
        <param name="MaxFileSize" value="5000KB" />
        <param name="MaxBackupIndex" value="99" />
        <param name="append" value="true" />        
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{dd-MM-yyyy HH:mm:ss} %-5p%c{1} - %m%n" />
        </layout>
    </appender>

    <root>
        <level value="error" />
        <appender-ref ref="LogFileAppender" />
    </root>

</log4j:configuration>
于 2013-01-04T12:21:22.323 に答える