Log4j 的配置

来源:互联网 发布:管家婆软件售后电话 编辑:程序博客网 时间:2024/05/18 02:27
上一章介绍log4j的核心组件。本章介绍如何使用配置文件来配置这些核心组件。配置log4j涉及分配级别,定义追加程序,并在配置文件中指定布局的对象。
Appenders:
Apache的log4j提供Appender对象主要负责打印日志消息到不同的目的地,如控制台,文件,sockets,NT事件日志等等。每个Appender对象具有与之相关联的不同的属性,并且这些属性表明对象的行为,常用属性如下:
属性
描述
layout
Appender使用布局Layout 对象和与之相关的格式化的日志记录信息转换模式
target
目标可以是一个控制台,一个文件,或根据附加器的另一个项目
level
级别是必需的,以控制日志消息的过滤
threshold
Appender可以有与之独立的记录器级别相关联的级别阈值水平。Appender忽略具有级别低于阈级别的任何日志消息
filter
Filter 对象可以分析超出级别的匹配记录信息,并决定是否记录的请求应该由一个特定 Appender 或忽略处理
根Logger
根logger主要定义log4j支持的日志级别及输出目的地,其语法为:
log4j.rootLogger = [ level ] , appenderName, appenderName, …
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。
Level
描述
ALL
各级包括自定义级别
DEBUG
指定细粒度信息事件是最有用的应用程序调试
ERROR
错误事件可能仍然允许应用程序继续运行
FATAL
指定非常严重的错误事件,这可能导致应用程序中止
INFO
指定能够突出在粗粒度级别的应用程序运行情况的信息的消息
OFF
这是最高等级,为了关闭日志记录
TRACE
指定细粒度比DEBUG更低的信息事件
WARN
指定具有潜在危害的情况

建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。
appenderName指定日志信息输出到哪个地方,可同时指定多个输出目的地。
配置输出目的地Appender
Appender主要定义日志信息输出在什么位置,主要语法为:
log4j.appender.appenderName = classInfolog4j.appender.appenderName.option1 = value1…...log4j.appender.appenderName.optionN = valueN
Log4j提供的appender有以下几种:
•org.apache.log4j.ConsoleAppender(控制台),
•org.apache.log4j.FileAppender(文件),
•org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
•org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
•org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
配置日志信息的格式Layout
Layout 负责格式化Appender的输出,其语法为:
log4j.appender.appenderName.layout = classInfolog4j.appender.appenderName.layout.option1 = value1…log4j.appender.appenderName.layout.optionN = valueN

其中,Log4j提供的layout有以下几种:
•org.apache.log4j.ConsoleAppender(控制台),
•org.apache.log4j.FileAppender(文件),
•org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
•org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
•org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
设置package输出级别
可以设置不同package的日志输出级别,语法为:
log4j.logger.packageName=level
其中,packageName为实际的包名,level为日志级别,例如:
log4j.logger.org.springframework=infolog4j.logger.org.apache.catalina=infolog4j.logger.org.apache.commons.digester.Digester=infolog4j.logger.org.apache.catalina.startup.TldConfig=infolog4j.logger.chb.test=debug

Log4j配置方式
通过上面的介绍,我们已经大概清楚了配置Log4j所需要的内容,Log4j可以通过java程序动态设置,该方式缺点是:如果需要修改日志输出级别等信息,则必须修改java文件,然后重新编译,很是麻烦。log4j也可以通过配置文件的方式进行设置,目前支持两种格式的配置文件:
•properties文件(推荐)
•xml文件
以下是 log4j.properties 文件的一个样例语法:
# Define the root logger with appender Xlog4j.rootLogger = DEBUG, X # Set the appender named X to be a File appenderlog4j.appender.X=org.apache.log4j.FileAppender# Define the layout for X appenderlog4j.appender.X.layout=org.apache.log4j.PatternLayoutlog4j.appender.X.layout.conversionPattern=%m%n
使用上面的语法,我们定义 log4j.properties 文件如下:
● 根日志记录器(logger)的级别定义为DEBUG并连接附加器命名为FILE
● 附加器(appender)File是定义为org.apache.log4j.FileAppender并写入到一个名为“log.out”位于日志log目录下

● 定义的布局模式是%m%n,这意味着每打印日志消息之后,将加上一个换行符

# Define the root logger with appender file
log=D:/log4jlog4j.rootCategory=INFO, filelog4j.rootLogger = INFO,file# Define the file appenderlog4j.appender.file=org.apache.log4j.FileAppenderlog4j.appender.file.File=${log}/log.out# Define the layout for file appenderlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.conversionPattern=%m%n
再写一个复杂点的,这个在实际项目中用的比较多
#设置等级和Appender。log4j.rootLogger=debug,appender1,apppender2#定义appender1属性和布局#附加器(appender) appender1定义为控制台输出log4j.appender. appender1= org.apache.log4j.ConsoleAppenderlog4j.appender. appender1.layout=org.apache.log4j.PatternLayoutlog4j.appender. appender1.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n#定义appender2属性和布局 #appender2定义为文件输出log4j.appender. appender2=org.apache.log4j.RollingFileAppenderlog4j.appender.apppender2.File=example.loglog4j.appender.appender2.MaxFileSize=100KBlog4j.appenderappender2.MaxBackupIndex=1log4j.appender.appender2.layout=org.apache.log4j.PatternLayoutlog4j.appender.appender2.layout.ConversionPattern=%p %t %c - %m%n#输出日志的格式和信息都是可配可选的。


参考:
http://zhaoyanblog.com/archives/167.html
http://www.yiibai.com/log4j/log4j_configuration.html
http://www.jb51.net/article/41001.htm