4

メッセージのロギング レベルに基づいて 2 つの個別のパターンを使用するように log4j を設定するにはどうすればよいですか?

たとえば、現在、すべてのレベルに適用される次のものを使用しています。

log4j.appender.stdout.layout.ConversionPattern=%-5p %d{HH\:mm\:ss} - %m%n

私がやりたいのは、WARN 以上のレベルに別のパターンを使用することです。そのような:

%-5p %d{HH\:mm\:ss} - [%L:%C] %m%n

警告またはエラーが発生した行番号とクラスを出力します。警告やエラーが発生する状況では、発信者情報を取得するための余分なコストを支払う価値があります。

これは実行可能ですか?

ここに私の完全な log4j.properties ファイルがあります:

log4j.rootLogger=WARN, stdout1, stdout2
log4j.category.my.package=DEBUG

log4j.appender.stdout1=org.apache.log4j.ConsoleAppender
log4j.appender.stdout1.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout1.layout.ConversionPattern=%-5p %d{HH\:mm\:ss} - %m%n

log4j.appender.stdout2=org.apache.log4j.ConsoleAppender
log4j.appender.stdout2.threshold=WARN
log4j.appender.stdout2.target=System.err
log4j.appender.stdout2.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout2.layout.ConversionPattern=%-5p %d{HH\:mm\:ss} - [%t] [%L:%C] %m%n

編集

threshold以上のすべてのレベルを記録するために必要なもののようWARNです。INFO のすべてのレベルとそれ以下をログに記録するように他のアペンダーを構成する同様のプロパティはありますか?

4

2 に答える 2

1

ここで答えを見つけました:stderrとdebugへのエラーのロギング、log4jでstdoutへの情報

必要な結果を得るには、プロパティ ファイルの代わりに xml ファイルを使用する必要がありました。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
    <!-- STDERR - WARN and above -->
    <appender name="stderr" class="org.apache.log4j.ConsoleAppender">
        <param name="threshold" value="warn" />
        <param name="target" value="System.err"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %d{HH\:mm\:ss} - [%t][%L:%C] %m%n" />
        </layout>
    </appender>
    <!-- STDINFO - DEBUG & INFO -->
    <appender name="stdout" 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="%-5p %d{HH\:mm\:ss} - %m%n" />
        </layout>
        <filter class="org.apache.log4j.varia.LevelRangeFilter">
            <param name="LevelMin" value="debug" />
            <param name="LevelMax" value="info" />
        </filter>
    </appender>
    <category name="my.project.package">
        <!-- Display DEBUG and above for all log messages in My Project -->
        <param name="level" value="debug" />
    </category>
    <root>
        <!-- Global Setting - Display only WARN messages
             This surpresses other libraries from display DEBUG & INFO messages
             But the Category setting above for your project will override this 
             and display DEBUG & INFO messages (using STDOUT) as well as 
             WARN and above (using STDERR) -->
        <priority value="warn"></priority>
        <appender-ref ref="stderr" />
        <appender-ref ref="stdout" />
    </root>
</log4j:configuration>
于 2012-08-22T17:16:01.523 に答える
1

ここで私が使用するプロパティ:

log4j.rootLogger=WARN, CONSOLE, FICLOG

####### CONSOLE is set to be a ConsoleAppender.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
####### CONSOLE uses PatternLayout.
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%-5r %-5p[%C{1}.%M]:%m%n

####### FICLOG is set to be a FileAppender à la racine du projet
log4j.appender.FICLOG=org.apache.log4j.RollingFileAppender
####### FIC uses PatternLayout.
####### ex:log4j.appender.dest2.File=${java.home}/log4j.log
log4j.appender.FICLOG.File=Appli_Info.log
log4j.appender.FICLOG.threshold=WARN
log4j.appender.FICLOG.MaxFileSize=5MB
log4j.appender.FICLOG.MaxBackupIndex=8
log4j.appender.FICLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.FICLOG.layout.ConversionPattern=%d %-8r [%t] %-5p [%C{1}.%M] %x - %m%n
####### log4j.appender.FICLOG.layout.ConversionPattern=%d{HH:mm:ss} %-8r [%t] %-5p [%C{1}.%M] %x - %m%n

HTH

于 2012-07-12T07:40:49.573 に答える