Log4j 的配置-阿里云开发者社区

开发者社区> 开发与运维> 正文

Log4j 的配置

简介: 上一章介绍log4j的核心组件。本章介绍如何使用配置文件来配置这些核心组件。配置log4j涉及分配级别,定义追加程序,并在配置文件中指定布局的对象。
上一章介绍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 = classInfo
log4j.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 = classInfo
log4j.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=info
log4j.logger.org.apache.catalina=info
log4j.logger.org.apache.commons.digester.Digester=info
log4j.logger.org.apache.catalina.startup.TldConfig=info
log4j.logger.chb.test=debug

Log4j配置方式
通过上面的介绍,我们已经大概清楚了配置Log4j所需要的内容,Log4j可以通过java程序动态设置,该方式缺点是:如果需要修改日志输出级别等信息,则必须修改java文件,然后重新编译,很是麻烦。log4j也可以通过配置文件的方式进行设置,目前支持两种格式的配置文件:
•properties文件(推荐)
•xml文件
以下是 log4j.properties 文件的一个样例语法:
# Define the root logger with appender X
log4j.rootLogger = DEBUG, X
 # Set the appender named X to be a File appender
log4j.appender.X=org.apache.log4j.FileAppender
# Define the layout for X appender
log4j.appender.X.layout=org.apache.log4j.PatternLayout
log4j.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:/log4j log4j.rootCategory=INFO, file log4j.rootLogger = INFO,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
再写一个复杂点的,这个在实际项目中用的比较多
#设置等级和Appender。
log4j.rootLogger=debug,appender1,apppender2

#定义appender1属性和布局
#附加器(appender) appender1定义为控制台输出
log4j.appender. appender1= org.apache.log4j.ConsoleAppender
log4j.appender. appender1.layout=org.apache.log4j.PatternLayout
log4j.appender. appender1.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

#定义appender2属性和布局 

#appender2定义为文件输出
log4j.appender. appender2=org.apache.log4j.RollingFileAppender
log4j.appender.apppender2.File=example.log
log4j.appender.appender2.MaxFileSize=100KB
log4j.appenderappender2.MaxBackupIndex=1
log4j.appender.appender2.layout=org.apache.log4j.PatternLayout
log4j.appender.appender2.layout.ConversionPattern=%p %t %c - %m%n
#输出日志的格式和信息都是可配可选的。


参考:

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章