Log4J记录器为不同的类 [英] Log4J loggers for different classes

查看:135
本文介绍了Log4J记录器为不同的类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想使用Log4J来记录我的java项目。
我在src目录中创建了一个log4j.properties文件,具有以下内容:

I want to use Log4J for logging my java projects. I created a log4j.properties file in the src directory with the following content:

# 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。所以我写道:

For example I want to use the "DEFAULT_LOGGER" only in my main method. So I wrote:

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

但是当我执行main方法时,我会将所有Appender(stdout, file和file2)但是我只想打印出来到file2。我如何做到这一点,或者说更好的说,我做错了什么?

But when I execute the main method I prints the message "Process Logger" to all Appenders (stdout, file and file2) But I only want to print it out to file2. How can I do that or better ro say what do I do wrong?

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

The second point is, when I execute the main method the second time, it does not overwrite file and file2, it justs adds a line inside the textfile. How can I avoid that?

推荐答案

Log4j有一个叫加性的东西。默认情况下,它设置为true,这意味着您写入的每个日志不仅将由特定记录器记录,而且还由其祖先记录(在本例中为根记录器)。

Log4j has something called additivity. by default it is set to true and it means that every log you write will not only be logged by the specific logger but also by its ancestors (the root logger in this case).

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

To set it to false try this:

log4j.additivity.DEFAULT_LOGGER = false

了解更多信息 here

这篇关于Log4J记录器为不同的类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆