Java 不同类别的Log4J记录器

Java 不同类别的Log4J记录器,java,eclipse,class,log4j,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 log

我想使用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方法时,我会将消息“processlogger”打印到所有appender(stdout、file和file2),但我只想将其打印到file2。我该怎么做,或者说我做错了什么


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

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

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

log4j.additivity.DEFAULT_LOGGER = false

了解更多信息。

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

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

log4j.additivity.DEFAULT_LOGGER = false
了解更多信息。

尝试:

log4j.additivity.DEFAULT\u LOGGER=false

尝试:


log4j.additivity.DEFAULT\u LOGGER=false

谢谢。现在,输出只存储在文件2中,而不存储在标准输出中。但还有两件事要做。当我启动main方法时,它仍然创建file和file2。文件为空,输出仅写入文件2,但我根本不想创建文件。这是怎么回事?还有一个问题,当我执行方法2次时,log4j不会覆盖file2,它只是将输出添加到文件中。log4j在开始时扫描属性文件,并创建附加到记录器定义的所有所需文件。因此,如果不希望创建文件,请从记录器中删除appender:
log4j.rootLogger=INFO,file,stdout
,将其设置为:
log4j.rootLogger=INFO,stdout
,为什么要覆盖该文件?这基本上超出了日志记录的目的……因为当我重新启动应用程序时,我希望有一个没有旧条目的新日志文件(可能是从最后一天开始的),当然我可以用java删除它,但我不想。有了标准的Java日志API,就可以说我是想添加输出,还是想覆盖输出,谢谢。现在,输出只存储在文件2中,而不存储在标准输出中。但还有两件事要做。当我启动main方法时,它仍然创建file和file2。文件为空,输出仅写入文件2,但我根本不想创建文件。这是怎么回事?还有一个问题,当我执行方法2次时,log4j不会覆盖file2,它只是将输出添加到文件中。log4j在开始时扫描属性文件,并创建附加到记录器定义的所有所需文件。因此,如果不希望创建文件,请从记录器中删除appender:
log4j.rootLogger=INFO,file,stdout
,将其设置为:
log4j.rootLogger=INFO,stdout
,为什么要覆盖该文件?这基本上超出了日志记录的目的……因为当我重新启动应用程序时,我希望有一个没有旧条目的新日志文件(可能是从最后一天开始的),当然我可以用java删除它,但我不想。有了标准的Java日志API,就可以说是要添加输出还是要覆盖输出