Log4J的记录仪不同类别(Log4J loggers for different classes)

2019-06-26 20:10发布

我想使用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");

但是,当我执行的主要方法我打印消息“过程记录器”所有的Appender(标准输出,文件和文件2),但我只是想打印出来,以文件2。 我怎样才能做到这一点或更好的RO说我该怎么办错了吗?

第二点是,当我执行主方法的第二个时间,它不会覆盖文件和file2,它甫一添加文本文件内的线。 我怎样才能避免这种情况?

Answer 1:

Log4j中有一种叫additivity 。 默认情况下它设置为true,这意味着,每一个记录你写不仅要通过特定的记录,而且通过它的祖先(在这种情况下,根记录器)被记录。

若要将其设置为false试试这个:

log4j.additivity.DEFAULT_LOGGER = false

了解更多关于它在这里 。



Answer 2:

尝试:

log4j.additivity.DEFAULT_LOGGER = false



文章来源: Log4J loggers for different classes