您的位置:首页 > 其它

logback logback.xml 常用配置详解(转)

2015-12-11 10:29 471 查看
本文转自:/article/3464062.html

一:根节点包含的属性:

scan:
当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。

scanPeriod:
设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。

debug:
当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。

例如:

<configurationscan="true"scanPeriod="60seconds"debug="false"> <!--其他配置省略--> </configuration>


  

二:根节点的子节点:





2.1设置上下文名称:
<contextName>

每个logger都关联到logger上下文,默认上下文名称为
default
。但可以使用
<contextName>
设置成其他名字,用于区分不同应用程序的记录。一旦设置,不能修改。



<configurationscan="true"scanPeriod="60seconds"debug="false"> <contextName>myAppName</contextName> <!--其他配置省略--> </configuration>  


2.2设置变量:
<property>

用来定义变量值的标签,
<property>
有两个属性name和value;

name:变量的名称

value:的值时变量定义的值。

通过
<property>
定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。

例如使用
<property>
定义上下文名称,然后在
<contentName>
设置logger上下文时使用。



<configurationscan="true"scanPeriod="60seconds"debug="false"> <propertyname="APP_Name"value="myAppName"/> <contextName>${APP_Name}</contextName> <!--其他配置省略--> </configuration>  


2.3获取时间戳字符串:
<timestamp>

两个属性:

key:标识此
<timestamp>
的名字;

datePattern:设置将当前时间(解析配置文件的时间)转换为字符串的模式,遵循java.txt.SimpleDateFormat的格式。

例如将解析配置文件的时间作为上下文名称:



<configurationscan="true"scanPeriod="60seconds"debug="false"> <timestampkey="bySecond"datePattern="yyyyMMdd'T'HHmmss"/> <contextName>${bySecond}</contextName> <!--其他配置省略--> </configuration>  


2.4设置loger:

<loger>


用来设置某一个包或者具体的某一个类的日志打印级别、以及指定
<appender>
<loger>
仅有一个
name
属性,一个可选的
level
和一个可选的
addtivity
属性。

name:
用来指定受此loger约束的某一个包或者具体的某一个类。

level:
用来设置打印级别,大小写无关:
TRACE
,
DEBUG
,INFO
,
WARN
,
ERROR
,
ALL
OFF
,还有一个特俗值
INHERITED
或者同义词
NULL`,代表强制执行上级的级别。
如果未设置此属性,那么当前loger将会继承上级的级别。

addtivity:
是否向上级loger传递打印信息。默认是true。

<root>

也是元素,但是它是根loger。只有一个level属性,应为已经被命名为"root”.

level:用来设置打印级别,大小写无关:
TRACE
,
DEBUG
,
INFO
,
WARN
,
ERROR
,
ALL
OFF
,不能设置为
INHERITED
或者同义词
NULL

默认是DEBUG。

<loger>
<root>
可以包含零个或多个
<appender-ref>
元素,标识这个
appender
将会添加到这个
loger


例如:
LogbackDemo.java类



packagelogback; importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; publicclassLogbackDemo{ privatestaticLoggerlog=LoggerFactory.getLogger(LogbackDemo.class); publicstaticvoidmain(String[]args){ log.trace("======trace"); log.debug("======debug"); log.info("======info"); log.warn("======warn"); log.error("======error"); } }  


三、logback.xml配置文件

第1种:只配置root

<configuration> <appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"> <!--encoder默认配置为PatternLayoutEncoder--> <encoder> <pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern> </encoder> </appender> <rootlevel="INFO"> <appender-refref="STDOUT"/> </root> </configuration>  


其中appender的配置表示打印到控制台(稍后详细讲解appender);

<rootlevel="INFO">
将root的打印级别设置为“INFO”,指定了名字为“STDOUT”的appender。

当执行
logback.LogbackDemo
类的
main
方法时,root将级别为“INFO”及大于“INFO”的日志信息交给已经配置好的名为“STDOUT”的appender处理,“STDOUT”appender将信息打印到控制台;

打印结果如下:

13:30:38.484[main]INFOlogback.LogbackDemo-======info 13:30:38.500[main]WARNlogback.LogbackDemo-======warn 13:30:38.500[main]ERRORlogback.LogbackDemo-======error  


第2种:带有loger的配置,不指定级别,不指定appender:

<configuration>

<appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender">
<!--encoder默认配置为PatternLayoutEncoder-->
<encoder>
<pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern>
</encoder>
</appender>

<!--logback为java中的包-->
<loggername="logback"/>

<rootlevel="DEBUG">
<appender-refref="STDOUT"/>
</root>

</configuration>


其中appender的配置表示打印到控制台(稍后详细讲解appender);
<loggername="logback"/>
将控制logback包下的所有类的日志的打印,但是并没用设置打印级别,所以继承他的上级
<root>
的日志级别“DEBUG”;
没有设置addtivity,默认为true,将此loger的打印信息向上级传递;
没有设置appender,此loger本身不打印任何信息。
<rootlevel="DEBUG">
将root的打印级别设置为“DEBUG”,指定了名字为“STDOUT”的appender。

当执行
logback.LogbackDemo
类的
main
方法时,因为LogbackDemo在包logback中,所以首先执行
<loggername="logback"/>
,将级别为“DEBUG”及大于“DEBUG”的日志信息传递给root,本身并不打印;
root接到下级传递的信息,交给已经配置好的名为“STDOUT”的appender处理,“STDOUT”appender将信息打印到控制台;

打印结果如下:

13:19:15.406[main]DEBUGlogback.LogbackDemo-======debug 13:19:15.406[main]INFOlogback.LogbackDemo-======info 13:19:15.406[main]WARNlogback.LogbackDemo-======warn 13:19:15.406[main]ERRORlogback.LogbackDemo-======error  


第3种:带有多个loger的配置,指定级别,指定appender:



<configuration> <appendername="STDOUT"class="ch.qos.logback.core.ConsoleAppender"> <!--encoder默认配置为PatternLayoutEncoder--> <encoder> <pattern>%d{HH:mm:ss.SSS}[%thread]%-5level%logger{36}-%msg%n</pattern> </encoder> </appender> <!--logback为java中的包--> <loggername="logback"/> <!--logback.LogbackDemo:类的全路径--> <loggername="logback.LogbackDemo"level="INFO"additivity="false"> <appender-refref="STDOUT"/> </logger> <rootlevel="ERROR"> <appender-refref="STDOUT"/> </root> </configuration>


其中appender的配置表示打印到控制台(稍后详细讲解appender);

<loggername="logback"/>
将控制logback包下的所有类的日志的打印,但是并没用设置打印级别,所以继承他的上级
<root>
的日志级别“DEBUG”;
没有设置addtivity,默认为true,将此loger的打印信息向上级传递;
没有设置appender,此loger本身不打印任何信息。

<loggername="logback.LogbackDemo"level="INFO"additivity="false">
控制
logback.LogbackDemo
类的日志打印,打印级别为“INFO”;
additivity属性为false,表示此loger的打印信息不再向上级传递,
指定了名字为“STDOUT”的appender。

<rootlevel="DEBUG">
将root的打印级别设置为“ERROR”,指定了名字为“STDOUT”的appender。

当执行
logback.LogbackDemo
类的main方法时,先执行
<loggername="logback.LogbackDemo"level="INFO"additivity="false">
,将级别为“INFO”及大于“INFO”的日志信息交给此loger指定的名为“STDOUT”的appender处理,在控制台中打出日志,不再向次loger的上级
<loggername="logback"/>
传递打印信息;
<loggername="logback"/>
未接到任何打印信息,当然也不会给它的上级root传递任何打印信息;

打印结果如下:

14:09:01.531[main]INFOlogback.LogbackDemo-======info 14:09:01.531[main]INFOlogback.LogbackDemo-======info 14:09:01.531[main]WARNlogback.LogbackDemo-======warn 14:09:01.531[main]WARNlogback.LogbackDemo-======warn 14:09:01.531[main]ERRORlogback.LogbackDemo-======error 14:09:01.531[main]ERRORlogback.LogbackDemo-======error


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: