1

Javaプロジェクトのログ記録にLog4Jを使用したいと思います。srcディレクトリに次の内容のlog4j.propertiesファイルを作成しました。

# Root logger option
log4j.rootLogger=INFO, file, stdout
log4j.logger.DEFAULT_LOGGER=INFO,file2

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=file.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p %c - %m%n



# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


log4j.appender.file2=org.apache.log4j.FileAppender
log4j.appender.file2.File=file2.log
log4j.appender.file2.layout=org.apache.log4j.PatternLayout
log4j.appender.file2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

たとえば、メインメソッドでのみ「DEFAULT_LOGGER」を使用したいとします。だから私は書いた:

static Logger log = Logger.getLogger("DEFAULT_LOGGER");
log.fatal("Process Logger");

しかし、mainメソッドを実行すると、「Process Logger」というメッセージがすべてのアペンダー(stdout、file、file2)に出力されますが、file2にのみ出力したいと思います。どうすればそれを行うことができますか、または私が間違っていることを言う方が良いですか?

2つ目のポイントは、mainメソッドを2回実行すると、fileとfile2が上書きされず、テキストファイル内に行が追加されるだけです。どうすればそれを回避できますか?

4

2 に答える 2

3

Log4jには。と呼ばれるものがありadditivityます。デフォルトではtrueに設定されており、書き込むすべてのログは特定のロガーだけでなく、その祖先(この場合はルートロガー)によってもログに記録されることを意味します。

falseに設定するには、次のことを試してください。

log4j.additivity.DEFAULT_LOGGER = false

詳細については、こちらをご覧ください。

于 2012-08-07T09:06:24.537 に答える
1

試す:

log4j.additivity.DEFAULT_LOGGER = false

于 2012-08-07T09:07:13.467 に答える