如何为整个应用程序定义全局记录器?
How to define global logger for whole application?
我有几个 classes 的应用程序,每个都有自己的记录器 (Logger log = Logger.getLogger(this.class)
)。每个 class 都有需要记录的方法。
有没有什么方法可以定义记录器(而不是 "this.class")使所有 classes 都记录到一个附加程序(一个文件)中?
如果能在VM选项的帮助下完成就好了,比如-Dlog4j.configuration=...
每个文件都有一个单独的 Logger
实例并不意味着它们会被记录到不同的文件中。事实上,他们通常不是。将 class 作为 getLogger()
方法的参数的唯一目的是给它一个 name (在这种情况下,您的 class 的名称所有包)。
该名称有两个用途:首先,它可以像这样记录在您的消息中:
[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 了解更多信息。
如果出于某种原因您不想将记录器绑定到您的 class,您可以随时调用 Logger.getRootLogger()
,其中 returns 具有特殊默认名称的记录器 ROOT
.
我有几个 classes 的应用程序,每个都有自己的记录器 (Logger log = Logger.getLogger(this.class)
)。每个 class 都有需要记录的方法。
有没有什么方法可以定义记录器(而不是 "this.class")使所有 classes 都记录到一个附加程序(一个文件)中?
如果能在VM选项的帮助下完成就好了,比如-Dlog4j.configuration=...
每个文件都有一个单独的 Logger
实例并不意味着它们会被记录到不同的文件中。事实上,他们通常不是。将 class 作为 getLogger()
方法的参数的唯一目的是给它一个 name (在这种情况下,您的 class 的名称所有包)。
该名称有两个用途:首先,它可以像这样记录在您的消息中:
[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 了解更多信息。
如果出于某种原因您不想将记录器绑定到您的 class,您可以随时调用 Logger.getRootLogger()
,其中 returns 具有特殊默认名称的记录器 ROOT
.