Log4j 配置
上一章解释了 log4j 的核心组件。 本章介绍如何使用配置文件配置核心组件。 配置 log4j 包括在配置文件中分配 Level、定义 Appender 和指定 Layout 对象。
log4j.properties
文件是一个 log4j 配置文件,它将属性保存在键值对中。 默认情况下,LogManager
在 CLASSPATH 中查找名为 log4j2.properties 的文件。
- 根记录器的级别定义为 DEBUG。 DEBUG 将名为 X 的附加程序附加到它。
- 将名为 X 的 appender 设置为有效的 appender。
- 设置 appender X 的布局。
log4j2.properties 语法
以下是 appender X 的 log4j2.properties
文件的语法:
#根记录器
rootLogger.level = info
#控制台数据
appender.console.type = Console
appender.console.name = console
#输出布局类型
appender.console.layout.type = PatternLayout
#输入信息格式
appender.console.layout.pattern = %-d{yyyy-MM-dd HH:mm:ss,SSS} [%p] %c %m%n
log4j2.properties 示例
使用上述语法,我们在 log4j2.properties
文件中定义以下内容:
- 根 logger 的级别定义为 DEBUG,DEBUG appender 命名为 FILE。
- appender FILE 写入位于日志目录中的名为 log.out 的文件。
- 定义的布局模式是 %m%n,这意味着打印的日志消息后面将跟一个换行符。
property.filename = /workspace/java/log4j
#
appender.infoFile.type = FILE
appender.infoFile.name = infoLogFile
#
appender.infoFile.fileName=${filename}/info.log
appender.infoFile.layout.type = PatternLayout
appender.infoFile.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} [%t] - %m%n
rootLogger.level = info
rootLogger.appenderRef.infoFile.ref = infoLogFile
rootLogger.appenderRef.infoFile.level = info
需要注意的是,log4j 支持 UNIX 风格的变量替换,例如 ${variableName}
。
Debug 级别
我们已经将 DEBUG 与两个 appender 一起使用。 所有可能的选项是:
- TRACE
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
- ALL
这些级别将在本教程后面进行解释。
Appenders
Apache log4j 提供了 Appender 对象,这些对象主要负责将日志消息打印到不同的目的地,例如控制台、文件、套接字、NT 事件日志等。
每个 Appender 对象都有与之关联的不同属性,这些属性指示该对象的行为。
属性 | 描述 |
---|---|
layout | Appender 使用 Layout 对象和与之关联的转换模式来格式化日志信息。 |
target | 目标可能是控制台、文件或其他项目,具体取决于附加程序。 |
level | 需要该级别来控制日志消息的过滤。 |
threshold | Appender 可以有一个与它相关的阈值级别,独立于记录器级别。 Appender 忽略任何级别低于阈值级别的日志消息。 |
filter | Filter 对象可以分析超出级别匹配的日志信息,并决定日志请求是否应该由特定的 Appender 处理或忽略。 |
我们可以通过以下方法在配置文件中包含以下设置,将 Appender 对象添加到 Logger:
log4j.logger.[logger-name]=level, appender1,appender..n
我们可以使用 XML 格式编写相同的配置,如下所示:
<logger name="com.apress.logging.log4j" additivity="false">
<appender-ref ref="appender1"/>
<appender-ref ref="appender2"/>
</logger>
如果我们愿意在程序中添加 Appender 对象,则可以使用以下方法:
public void addAppender(Appender appender);
addAppender()
方法将 Appender 添加到 Logger
对象。 如示例配置所示,可以将许多 Appender
对象添加到逗号分隔列表中的记录器中,每个将记录信息打印到单独的目标。
在上面的示例中,我们只使用了一个附加程序 FileAppender
。 所有可能的附加选项是:
- AppenderSkeleton
- AsyncAppender
- ConsoleAppender
- DailyRollingFileAppender
- ExternallyRolledFileAppender
- FileAppender
- JDBCAppender
- JMSAppender
- LF5Appender
- NTEventLogAppender
- NullAppender
- RollingFileAppender
- SMTPAppender
- SocketAppender
- SocketHubAppender
- SyslogAppender
- TelnetAppender
- WriterAppender
我们将在 Logging in Files 中介绍 FileAppender
,而 JDBC Appender 将在 Logging in Database 中介绍。
Layout
我们在 appender 中使用了 PatternLayout
。 所有可能的选项是:
- DateLayout
- HTMLLayout
- PatternLayout
- SimpleLayout
- XMLLayout
使用 HTMLLayout
和 XMLLayout
,我们可以生成 HTML 和 XML 格式的日志。
Layout 格式
我们将在章节:日志格式化 中学习如何格式化日志消息。