4 Log4j配置

log4j配置

Log4j的配置包括在配置文件中:

  1. 指定Level
  2. 定义Appender
  3. 指明Layout

Log4j.properties文件是Log4j的配置文件,属性以键值对的形式定义。默认情况下,LogManager会在CLASSPATH中寻找Log4j.properties文件。

  • 根日志的级别定义为DEBUG,并将名为XXXappender添加其上。
  • 将名为XXXappender设置为合法的appender
  • 设置XXX这个appenderlayout

Log4j.properties的语法

appender XXXXX定义的Log4j.properties的语法如下:

# Define the root logger with appender XXX
log4j.rootLogger = DEBUG, XXX

# Set the appender named XXX to be a File appender
log4j.appender.XXX=org.apache.log4j.FileAppender

# Define the layout for XXX appender
log4j.appender.XXX.layout=org.apache.log4j.PatternLayout
log4j.appender.XXX.layout.conversionPattern=%m%n

Log4j.properties示例

使用上述语法,我们在Log4j.properties定义如下属性:

  • 定义根日志级别为DEBUG,并将名为FILEappender添加在其上。
  • appender FILE定义为org.apache.log4j.FileAppender,它将日志写入log目录下一个名为log.out的文件中。
  • layout被定义为%m%n,其中%m表示日志信息,%n表示换行符,则%m%n表示打印出日志信息并在末尾加入换行。
Log4j.properties
1
2
3
4
5
6
7
8
9
10
11
12
# 定义变量,该变量表示日志文件所在的目录
log = E:/workspacne_JDK8Tomcat8.5/Log4jDemo
# Define the root logger with appender file
log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=${log}/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

变量替换

值得注意的是,Log4j支持Unix风格的变量替换,比如${variableName}

级别

所有可能的选项如下:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
  • ALL

这些级别会在本教程的后续部分讲解。

Appender对象

Apache Log4j提供的Appender对象主要负责将日志信息打印至不同目的地,比如控制台、文件、网络套接字、NT事件日志等。

Appender对象属性

每个Appender对象都有不同的属性,这些属性决定了该对象的行为。

属性 描述
layout Appender使用Layout对象和与之关联的模式来格式化日志信息。
target 目的地可以是控制台、文件,或依赖于appender的对象。
level 级别用来控制过滤日志信息。
threshold Appender可脱离于日志级别定义一个阀值级别,Appender对象会忽略所有级别低于阀值级别的日志。
filter Filter对象可在级别基础之上分析日志信息,来决定Appender对象是否处理或忽略一条日志记录。

将Appender添加到Logger对象

通过在配置文件中使用如下方法,将Appender对象添加至Logger对象:

1
log4j.logger.[logger-name]=level, appender1,appender2...appendern

也可以在XML中定义同样的配置:

1
2
3
4
<logger name="com.apress.logging.Log4j" additivity="false">
<appender-ref ref="appender1"/>
<appender-ref ref="appender2"/>
</logger>

在程序中为Logger对象添加Appender对象

如果想在程序中添加Appender对象,可使用如下方法:

1
public void addAppender(Appender appender);

addAppender()方法为Logger对象增加一个Appender。如示例配置展示的那样,可以通过逗号分隔的列表,为logger添加多个Appender,将日志信息打印到不同的目的地。

所有可用的Appender

在上面的例子中,我们只用到了FileAppender,所有可用的appender包括:

  • AppenderSkeleton
  • AsyncAppender
  • ConsoleAppender
  • DailyRollingFileAppender
  • ExternallyRolledFileAppender
  • FileAppender
  • JDBCAppender
  • JMSAppender
  • LF5Appender
  • NTEventLogAppender
  • NullAppender
  • RollingFileAppender
  • SMTPAppender
  • SocketAppender
  • SocketHubAppender
  • SyslogAppender
  • TelnetAppender
  • WriterAppender

我们将在使用文件记录日志一章讲解FileAppender,在使用数据库记录日志一章讲解JDBCAppender

Layout对象

我们已经在appender中使用了PatternLayoutlayout对象的所有选项包括:

  • DateLayout
  • HTMLLayout
  • PatternLayout
  • SimpleLayout
  • XMLLayout

使用HTMLLayoutXMLLayout,可以生成HTMLXML格式的日志。

日志格式化
您将在日志格式一章学习如何格式化日志信息。