java日志框架系列(4):logback框架xml配置文件语法

1.xml配置文件语法

因为logback配置文件语法特别灵活,所以没法用DTD或schema进行定义。html

1.配置文件基本结构

 配置文件基本结构:以<configuration>标签开头,包含0或多个<appender>子标签,包含0或多个<logger>标签,最多只能有一个<root>标签。java

 

注意数组

从 logback 0.9.17 版起,标签名不区分大小些。好比,<logger>、<Logger>和<LOGGER>都是合法元素且表示同一个意思。按照 隐式规则标签名除了首字母外要区分大小写。所以,<xyz>与<Xyz>等价,但不等价于<xYz>。 隐式规则通常遵循 Java 世界里经常使用的驼峰命名规则。由于很难肯定一个标签何时与显式动做相关,何时又与隐式动做相关,因此很难说 XML 标记是不是大小写敏感。若是你不肯定标记名的大小写,就用驼峰命名法,基本不会错。

2.配置logger

配置Logger使用<logger>标签。这里的logger指的是普通logger,并不是根logger。app

1.logger标签属性

logger标签有3个属性:name、level、additivity。框架

其中name是必须的,level与additivity属性是可选的。post

level属性:设置分配的记录级别。url

additivity属性:表示appender的叠加性,默认值为true。具体含义请参考java日志框架系列(2):logback框架详解spa

level的值:TRACE、DEBUG、INFO、WARN、ERROR、ALL 和 OFF。还能够是一个特殊的字符串“INHERITED”或其同义词“NULL”,表示强制继承上级的级别。debug

2.logger标签的子标签

 logger标签能够包含的0或多个<appender-ref>子标签,表示这个<appender-ref>子标签所指的appender会被添加到这个logger中。
<appender-ref>标签只有一个属性ref,值为appender的name属性。
<appender-ref ref="appenderName"></appender-ref>

3.配置根logger

<root>标签配置根 logger。

1.root标签的属性

<root>标签只有一个 level 属性没有 name 属性,由于已经被命名为“ROOT”,也没有additivity属性;由于根logger已是顶级logger了,没有上级logger
level属性值:TRACE、DEBUG、INFO、WARN、ERROR、ALL 和 OFF。 注意不能设置为“INHERITED” 或“NULL。属性的值大小写无关。

2.root标签的包含的子标签

<logger>元素能够包含零个或多个<appender-ref>元素。与<logger>元素相似,声明<root>元素后,会先关闭而后移除所有当前 appender,只引用声明了的 appender。若是 root 元素没有引用任何 appender,就会失去全部 appender。

 4.配置appender

Appender 用<appender>标签配置。

1.appender标签的属性

属性: name 和 class。
name 属性指定 appender 的名称,class 属性指定 appender 类的全限定名。

2.appender标签的子标签

子标签种类:<layout>标签、<encoder>标签、<filter>标签。这三个标签都是可选的(0或多个)。当appender指向文件时,还能够包含<file>标签,指定写入的文件名。日志

除了这三个经常使用元素以外,还能够包含 appender 类的任意数量的 javabean
属性。下图演示了经常使用结构,注意对 javabean 属性的支持在图中不可见。

 

 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>
这个配置文件包含对文件“variables1.properties”的引用,该文件里的变量会被读入logback 配置文件的上下文里。
相关文章
相关标签/搜索