如何为整个应用程序定义全局记录器?

时间:2015-09-08 15:04:50

标签: java logging log4j

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

有没有办法定义记录器(而不是" this.class")以使所有类都登录到一个appender(一个文件)?

如果可以借助VM选项(例如-Dlog4j.configuration=...

)来完成它将会很棒

1 个答案:

答案 0 :(得分:4)

每个文件都有一个单独的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的记录器。