Log4J记录器用于不同的类

时间:2012-08-07 08:59:01

标签: java eclipse class log4j

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

例如,我想在我的main方法中使用“DEFAULT_LOGGER”。所以我写道:

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

但是当我执行main方法时,我将消息“Process Logger”打印到所有Appender(stdout,file和file2)但是我只想将它打印到file2。我怎么能这样做或更好地说我做错了什么?

第二点是,当我第二次执行main方法时,它不会覆盖文件和file2,它只是在文本文件中添加一行。我怎么能避免这种情况?

2 个答案:

答案 0 :(得分:3)

Log4j有一个名为additivity的东西。默认情况下,它设置为true,这意味着您编写的每个日志不仅会被特定记录器记录,还会记录其祖先(在本例中为根记录器)。

要将其设置为false,请尝试以下操作:

log4j.additivity.DEFAULT_LOGGER = false

详细了解here

答案 1 :(得分:1)

尝试:

log4j.additivity.DEFAULT_LOGGER = false