java日志框架系列(4):logback框架xml配置文件语法
1.xml配置文件语法
由于logback配置文件语法特别灵活,因此无法用DTD或schema进行定义。
1.配置文件基本结构
配置文件基本结构:以<configuration>标签开头,包含0或多个<appender>子标签,包含0或多个<logger>标签,最多只能有一个<root>标签。
注意:
2.配置logger
配置Logger使用<logger>标签。这里的logger指的是普通logger,并非根logger。
1.logger标签属性
logger标签有3个属性:name、level、additivity。
其中name是必须的,level与additivity属性是可选的。
level属性:设置分配的记录级别。
additivity属性:表示appender的叠加性,默认值为true。具体含义请参考java日志框架系列(2):logback框架详解
level的值:TRACE、DEBUG、INFO、WARN、ERROR、ALL 和 OFF。还可以是一个特殊的字符串“INHERITED”或其同义词“NULL”,表示强制继承上级的级别。
2.logger标签的子标签
<appender-ref ref="appenderName"></appender-ref>
3.配置根logger
1.root标签的属性
2.root标签的包含的子标签
4.配置appender
1.appender标签的属性
2.appender标签的子标签
子标签种类:<layout>标签、<encoder>标签、<filter>标签。这三个标签都是可选的(0或多个)。当appender指向文件时,还可以包含<file>标签,指定写入的文件名。
1.子标签<layout>
必要属性:class,表示被实例化的Layout类的全限定名。Layout类负责把事件转换为字符串。当Layout指是PatternLayout时,可以省略class属性。
2.子标签<encoder>
必要属性:class,表示被实例化的Encoder类的全限定名。Encoder 负责两件事,一是把事件转换为字节数组,二是把字节数组写入输出流。当Layout指是PatternLayoutEncoder时,可以省略class属性。
3.子标签<filter>
必要属性:class,表示被实例化的Filter类的全限定名。
5.appender累积
默认情况下,appender是累积的,logger会把记录输出到它自身和所有祖先的appender。因此,把一个appender关联到多个logger会导致重复输出。
解决方法:设置logger的additivity属性为false。
6.设置上下文(LoggerContext)名称
每个logger都会关联到logger上下文。默认情况下,logger上下文名称为default。
<contextName>标签:设置logger上下文名称。可以方便区分来自不同应用程序的记录。
注意:一旦设置logger上下文名称后就不能更改了。
在layout模式里添加“%contextName”就会输出上下文名称。
7.变量替换
什么意思呢,举个例子。当你需要将记录输出到文件中的时候,在<appender>中需要用<file>标签指定文件名(通常需要使用绝对路径名),这样固定文件路径可能比较死板,那么还有一种方式,就是通过变量来指定文件路径。
1.简单变量替换
在配置文件中的<configuration>里使用<property>标签设置变量,在<file>标签中使用变量,通过环境变量指定路径就可以,file标签中结合变量与文件名组成文件的完整路径名称。如下图:
2.系统变量替换
示例1:系统变量替换
当需要很多变量时,更方便的做法是在一个单独文件里声明所有变量。如下示例2
示例2:
<configuration>
<property file="src/main/java/chapters/configuration/variables1.properties" /> <appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>${USER_HOME}/myApp.log</file>
<encoder>
<pattern>%msg%n</pattern> </encoder> </appender>
<root level="debug">
<appender-ref ref="FILE" /> </root> </configuration>