45

私のアプリケーションには2つの異なるlog4jロガーがあり、それらがリスペクトログに書き込むコンテンツ間に「重複」がないようにしたいと思います。

例えば:

  • Logger1は、1セットのシステムイベントに関連するINFOイベントを書き込みます
  • Logger2は、別のシステムイベントのセットに関連するINFOイベントを書き込みます
  • ログにエントリが2回表示されないようにする必要があります

私のlog4j.propertiesは次のとおりです。

log4j.rootLogger=DEBUG, stdout
log4j.logger.org.apache=DEBUG, stdout
log4j.logger.xdasLogger=DEBUG, xdas

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%m%n

log4j.appender.xdas=org.apache.log4j.ConsoleAppender
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n

私のJavaコードは次のとおりです。

public static void main(String[] args) {
    PropertyConfigurator.configure(Client.class
            .getResource("/log4j.properties"));
    xdasLogger = Logger.getLogger("xdasLogger");
    logger = Logger.getLogger(Client.class);

    logger.info("normal");
    xdasLogger.info("xdas");
}

しかし、私のコンソール出力は次のとおりです。

normal
2012-06-28 09:52:44,580 INFO  xdasLogger - xdas
xdas

「xdas」はとの両方によってログに記録されることに注意してください。これは望ましくloggerありません。xdasLogger

コンソール出力を次のように変更するためにlog4j.propertiesにどのような変更を加える必要があるかを誰かが知っていますか?

normal
2012-06-28 09:52:44,580 INFO  xdasLogger - xdas

解決策(受け入れられた回答から取得):

log4j.rootLogger=DEBUG, stdout
log4j.logger.org.apache=DEBUG, stdout
log4j.logger.xdasLogger=DEBUG, xdas

log4j.additivity.org.apache=false
log4j.additivity.xdasLogger=false

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%m%n

log4j.appender.xdas=org.apache.log4j.ConsoleAppender
log4j.appender.xdas.layout=org.apache.log4j.PatternLayout
log4j.appender.xdas.layout.ConversionPattern=%d %-5p %c - %m%n
4

1 に答える 1

45

ロガーの加法性をfalseに設定してみてください。これにより、rootLoggerへの伝播が回避されます。

log4j.additivity.org.apache=false
log4j.additivity.xdasLogger=false
于 2012-06-28T08:07:36.900 に答える