4 Log4j配置

log4j配置

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

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

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

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

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,并将名为FILE的appender添加在其上。
  • 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中使用了PatternLayout,layout对象的所有选项包括:

  • DateLayout、
  • HTMLLayout、
  • PatternLayout、
  • SimpleLayout、
  • XMLLayout。

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

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