我有几个类的应用程序,每个类都有自己的记录器(Logger log = Logger.getLogger(this.class))。每个类都有需要记录的方法。

有什么方法可以定义记录器(而不是“ this.class”)以使所有类都登录到一个附加程序(一个文件)中?

如果可以借助VM选项(例如-Dlog4j.configuration=...)完成此操作,那将是很好的

最佳答案

每个文件都有单独的Logger实例,这并不意味着它们会记录到另一个文件中。实际上,它们通常不是。为getLogger()方法提供类作为参数的唯一目的是给它提供一个名称(在这种情况下,包含所有包的类的名称)。

该名称有两个用途:首先,可以将其记录在您的消息中,如下所示:

[main] INFO  MyApp  - Entering application.
[main] DEBUG com.foo.Bar  - Did it again!
[main] INFO  MyApp  - Exiting application.


其次,可以将其用于log4j的更细粒度的配置:

# Print only messages of level WARN or above in the package com.foo.
log4j.logger.com.foo=WARN


写入日志的文件可以通过配置进行控制,例如:

log4j.rootLogger=myfile
log4j.appender.myfile=org.apache.log4j.RollingFileAppender
log4j.appender.myfile.File=example.log


您可以阅读manual以获得更多信息。



如果由于某种原因您不想将记录器绑定到您的班级,则可以随时调用Logger.getRootLogger(),它返回具有特殊默认名称ROOT的记录器。

10-04 14:08
查看更多