log4j的配置文件配置出多个logger
来源:互联网 发布:淘宝店铺如何暂时关闭 编辑:程序博客网 时间:2024/06/07 07:33
转载于:http://blog.csdn.net/evatian/article/details/8501517,谢谢原作者的分享
内容简介:
本文主要介绍 在一个系统中如何通过log4j的配置文件配置出多个logger,使得该系统可以在不同路径下输出多个内容不同的log 文件。并通过该实例的实现过程进一步讲解log4j的一些特性。
具体内容:
1. 如何在项目中配置log4j使得该系统可以输出web test的日志文件(自定义格式)到工程dist目录下的junitLog/WebTestLog.log目录下,输出508 check日志(html格式)到c:/508log.html路径下?
第一步:加入log4j-1.2.8.jar到lib下。
第三步:根据需要修改log4j配置文件中的相应属性,修改之前就必须知道这些都是干什么的,在后面的部分具体讲解。
该实例中 根据需要 配好的log4j.properties如下:
- log4j.rootLogger=ERROR
- log4j.logger.com.testframework.web=ERROR,A3
- log4j.logger.com.testframework.util= ERROR,A1,A2
- log4j.appender.A1=org.apache.log4j.ConsoleAppender
- log4j.appender.A1.layout=org.apache.log4j.PatternLayout
- log4j.appender.A1.layout.ConversionPattern=%m%n
- log4j.appender.A2=org.apache.log4j.RollingFileAppender
- log4j.appender.A2.File=c:/508log.html
- log4j.appender.A2.MaxFileSize=50000KB
- log4j.appender.A2.MaxBackupIndex=1
- log4j.appender.A2.layout=org.apache.log4j.HTMLLayout
- log4j.appender.A3=org.apache.log4j.RollingFileAppender
- log4j.appender.A3.File=junitLog/WebTestLog.log
- log4j.appender.A3.MaxFileSize=50000KB
- log4j.appender.A3.MaxBackupIndex=1
- log4j.appender.A3.layout=org.apache.log4j.PatternLayout
- log4j.appender.A3.layout.ConversionPattern=%d{yyyy-MM-ddHH:mm:ss}%5p[%t](%F:%L)-%m%n
第四步:在要输出日志的类中加入相关语句。
- package com. testframework.web
- Public class PersonTest{
- //加载logger的语句- 加粗部分为log4j配置文件中配置的logger的名字
- static Logger logger = Logger.getLogger(PersonTest .class);
- public void testGetPersonNameById(int personId){
- ........
- String personName = "";
- try {
- personName= dataPool. getPersonNameById (int personId);
- } catch (Exception e){
- String errorMsg = " Get Person Name Failed!";
- //利用logger输出信息到日志中
- logger.error(errorMsg,e);
- fail(errorMsg);
- }
- ........
- }
- }
Note:由于Log4j中Logger具有Java的继承特性,所以在这个实例中,为了实现‘com. testframework.web’包下的所有类都可以使用Appender A3将Error级别以上的信息输出到工程dist目录下的junitLog/WebTestLog.log日志文件中。所以在properties文件中用包名定义了一个logger
log4j.logger.com.testframework.web=ERROR,A3
且在java代码中用该包中的类名来加载logger
staticLogger logger = Logger.getLogger(PersonTest.class);
此时,在java代码中所加载的这个logger的名字是com.testframework.web.PersonTest, 根据继承原理,由于在log4j配置文件中没有定义这个logger的level和appender,所以这个logger将自动继承其父logger‘com.testframework.web’的level和appender设置。
对于log4j的java继承原理,后面的部分会详细介绍。
2. Log4j配置文件讲解
Log4j支持两种配置文件格式,一种是XML格式的文件,一种是Java特性文件log4j.properties(键=值)。下面将介绍使用log4j.properties文件作为配置文件的方法。
2.1 配置根Logger
其中,level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,只有等于及高于这个级别的才进行处理,则应用程序中所有DEBUG级别的日志信息将不被打印出来。ALL: 打印所有的日志,OFF:关闭所有的日志输出。 appenderName就是指定日志信息输出到哪个地方,可同时指定多个输出目的地。
2.2 配置日志信息输出目的地 Appender
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.optionN = valueN
这里的appenderName为在①里定义的,可任意起名。
org.apache.log4j.ConsoleAppender(控制台),
例如:log4j.appender.stdout=org.apache.log4j.ConsoleAppender
2.3 配置日志信息的格式(布局)Layout
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.optionN = valueN
其中,Log4j提供的layout有以下几种:
2.3.1格式化日志信息
3. Log4j的java特性简介
Log4j简单的来说由3部分组成: logger,appender,layout。
Logger之间是具有java的继承特性的。Log4j有一个rootLogger,所有普通logger都默认继承rootLogger。而普通logger之间的继承关系是通过logger name来实现的。
例如,叫"com.foo.Bar"名字的logger就继承于叫"com.foo"名字的logger。就好像java中"java.util" 和"java.util.Vector"的关系一样。
而这些继承关系决定了logger的Level和Appender这两个属性的确定。
请看下面的例子(继承关系对确定logger的Level的影响):
Logger
name
Assigned
level
Inherited
level
root
Proot
Proot
X
Px
Px
X.Y
none
Px
X.Y.Z
Pxyz
Pxyz
在上面例子中我们可以了解到如果一个普通logger定义了Level,则其level就使用它定义的(例如:logger X),如果没有定义,就使用其父logger的(例如:logger X.Y)。
请看下面的例子(继承关系对确定logger的Appender的影响):
Logger
Name
Added
Appenders
Additivity
Flag
Output Targets
Comment
root
A1
not applicable
A1
The root logger is anonymous but can be accessed with the Logger.getRootLogger() method. There is no default appender attached to root.
x
A-x1, A-x2
true
A1, A-x1, A-x2
Appenders of "x" and root.
x.y
none
true
A1, A-x1, A-x2
Appenders of "x" and root.
x.y.z
A-xyz1
true
A1, A-x1, A-x2, A-xyz1
Appenders in "x.y.z", "x" and root.
security
A-sec
false
A-sec
No appender accumulation since the additivity flag is set to false.
security.access
none
true
A-sec
Only appenders of "security" because the additivity flag in "security" is set to false.
在上面的例子中我们可以看出:
a. 如果一个普通logger定义Appender且其AdditivityFlag是true,则该logger的Appender包括其定义的Appender及其父logger定义的Appender。例如:logger‘x’。
b. 如果一个普通logger没有定义Appender,但其AdditivityFlag是true,则该logger的Appender为其父logger定义的Appender。例如:logger‘x.y’。
c. 如果一个普通logger定义了Appender,但其AdditivityFlag是false,则该logger的Appender只为其定义的Appender。例如:logger‘security’。
- log4j的配置文件配置出多个logger
- Log4J的配置 及多个logger配置实例
- log4j学习记录 log4j配置文件的配置
- Log4J的配置文件详细配置
- log4j的分类别logger
- log4j的分类别logger
- log4j的分类别logger
- log4j的logger继承性
- log4j的logger继承性
- Log4J的配置文件的配置方法
- [Log4J] Log4J的配置文件
- log4j.properties配置文件配置项的说明
- 日志的配置文件配置方法-log4j
- log4j.properties配置文件配置项的说明
- Log4j – 如何配置多个logger?
- Log4j – 如何配置多个logger?
- Log4j – 如何配置多个logger
- Log4j – 如何配置多个logger?
- cuda纹理内存使用
- WPF对象的XAML序列化
- OpenGLES---加载文字
- TCP协议传输
- Android屏幕density, dip等相关概念总结
- log4j的配置文件配置出多个logger
- 用array_count_values统计一篇英文文档中每个单词的出现次数,结果用表格展示出来
- 全国十大热招职能,企业薪资数据揭秘
- 超详细的django1.8处理centos下nginx上处理静态文件步骤!
- WYDC项目开发
- 64位centos6.7安装mysql-5.7.11
- winform 显示控件层级关系
- STM32F4 Discover开发环境搭建(Keil MDK/STM32 Ac6 System Workbench)
- Java泛型