log4j - 配置

上一章介绍了 log4j 的核心组件。本章介绍如何使用配置文件配置核心组件。配置 log4j 涉及在配置文件中分配级别、定义 Appender 和指定 Layout 对象。

log4j.properties 文件是一个 log4j 配置文件,它将属性保存在键值对中。默认情况下,LogManager 在 CLASSPATH 中查找名为 log4j.properties 的文件。

  • 根记录器的级别定义为 DEBUGDEBUG 将名为 X 的附加器附加到它。

  • 将名为 X 的附加器设置为有效附加器。

  • 设置附加器 X 的布局。

log4j.properties 语法:

以下是附加器 X 的 log4j.properties 文件的语法:

# 使用附加器 X 定义根记录器
log4j.rootLogger = DEBUG, X

# 将名为 X 的附加器设置为文件附加器
log4j.appender.X=org.apache.log4j.FileAppender

# 定义 X 的布局appender
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.appender.X.layout.conversionPattern=%m%n

log4j.properties 示例

使用上述语法,我们在 log4j.properties 文件中定义以下内容:

  • 根记录器的级别定义为 DEBUGDEBUG 附加器将其命名为 FILE

  • 附加器 FILE 定义为 org.apache.log4j.FileAppender。它会写入位于 log 目录中名为 log.out 的文件。

  • 定义的布局模式为 %m%n,这意味着打印的日志消息后面会跟着一个换行符。

# 使用附加文件定义根记录器
log4j.rootLogger = DEBUG, FILE

# 定义文件附加器
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# 定义文件附加器的布局
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

需要注意的是log4j 支持 UNIX 样式的变量替换,例如 ${variableName}。

调试级别

我们对两个附加程序都使用了 DEBUG。所有可能的选项如下:

  • 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

我们将在登录文件中介绍 FileAppender,在登录数据库中介绍 JDBC Appender。

布局

我们已将 PatternLayout 与附加器结合使用。所有可能的选项是:

  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout

使用 HTMLLayout 和 XMLLayout,您可以生成 HTML 和 XML 格式的日志。

布局格式

您将在章节:日志格式中学习如何格式化日志消息。