1

我想使用 Log4J 来记录我的 java 项目。我在 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”打印到所有 Appender(stdout、file 和 file2)但我只想将它打印到 file2。我该怎么做或者更好的说我做错了什么?

第二点是,当我第二次执行main方法时,它并没有覆盖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 回答