1

コードの各クラスに2つのlog4jロガーがあります:

logA = Logger.getLogger(com.some.class.in.my.project);
logB = Logger.getLogger('perf');

これらの2つのロガーがデータを2つの完全に異なるファイルに出力するようにします。私はそれを機能させることができないようです。

これが私のlog4jプロパティです:

    log4j.rootLogger = myAppenderA


    # A
    log4j.appender.myAppenderA=org.apache.log4j.RollingFileAppender
    log4j.appender.myAppenderA.File=../logs/mylogfileA.log
    log4j.appender.myAppenderA.additivity=false
    log4j.appender.myAppenderA.Threshold=DEBUG
    log4j.appender.myAppenderA.layout=org.apache.log4j.PatternLayout
    log4j.appender.myAppenderA.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n


    # perf
    log4j.appender.perf=org.apache.log4j.RollingFileAppender
    log4j.appender.perf.File=..logs/perf.log
    log4j.appender.perf.additivity=false
    log4j.appender.perf.Threshold=DEBUG
    log4j.appender.perf.layout=org.apache.log4j.PatternLayout
    log4j.appender.perf.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n

    log4j.logger.myAppenderB = perf 

myLogfileA.logperf.logの両方に同じデータが含まれています。おそらく加法性をfalseに設定するとこれが修正されますが、私はそれを試しましたが、ほとんど影響がありません。

4

1 に答える 1

2

加法性はアペンダーではなくロガーのプロパティであるため、アペンダーadditivityからプロパティを削除してロガー構成に追加する必要があります。

現在、ファイルにはrootLogger構成しかありません(そして、そのログレベルを定義していません)ので、すべてのロガーはそこからアペンダーを拡張します。祖先へのメッセージの伝播のログ記録を停止するには、ロガーのadditivityプロパティを使用する必要があります。だからあなたが持っていることを達成するために:

  1. にもう1つのアペンダー(root)を定義しrootLoggerます。これはデフォルトのものになり、持っていない他のロガーに継承されますadditivity = false
  2. myAppenderAアペンダーをmypackage.MyClassロガーに割り当てます
  3. prefアペンダーをprefロガーに割り当てます
  4. 祖先ロガーへのログメッセージの伝播を停止するためadditivityのロガーmyAppenderAprefロガーのセット。false

穴のプロパティファイルがあります:

log4j.rootLogger = DEBUG, root


# Root
log4j.appender.root=org.apache.log4j.RollingFileAppender
log4j.appender.root.File=logs/mainLogInheritable.log
log4j.appender.root.Threshold=DEBUG
log4j.appender.root.layout=org.apache.log4j.PatternLayout
log4j.appender.root.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n


# A
log4j.appender.myAppenderA=org.apache.log4j.RollingFileAppender
log4j.appender.myAppenderA.File=logs/mylogfileA.log
#log4j.appender.myAppenderA.additivity=false
log4j.appender.myAppenderA.Threshold=DEBUG
log4j.appender.myAppenderA.layout=org.apache.log4j.PatternLayout
log4j.appender.myAppenderA.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n


# perf
log4j.appender.perf=org.apache.log4j.RollingFileAppender
log4j.appender.perf.File=logs/perf.log
#log4j.appender.perf.additivity=false
log4j.appender.perf.Threshold=DEBUG
log4j.appender.perf.layout=org.apache.log4j.PatternLayout
log4j.appender.perf.layout.ConversionPattern=%d{ISO8601} %-5p 0 %m%n


 log4j.logger.mypackage.MyClass = DEBUG, myAppenderA
 log4j.logger.perf  = DEBUG, perf

 log4j.additivity.perf = false
 log4j.additivity.mypackage.MyClass = false

3つの異なるファイルにログが記録されているかどうかをテストするには、次のことを試してください。

Logger.getLogger("mypackage.MyClass").debug("1111");
Logger.getLogger("perf").debug("2222");
Logger.getLogger("anyName").debug("3333");
于 2013-03-15T15:07:19.797 に答える