因为logback配置文件语法特别灵活,所以没法用DTD或schema进行定义。html
配置文件基本结构:以<configuration>标签开头,包含0或多个<appender>子标签,包含0或多个<logger>标签,最多只能有一个<root>标签。java
注意:数组
配置Logger使用<logger>标签。这里的logger指的是普通logger,并不是根logger。app
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
<appender-ref ref="appenderName"></appender-ref>
子标签种类:<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类的全限定名。
默认状况下,appender是累积的,logger会把记录输出到它自身和全部祖先的appender。所以,把一个appender关联到多个logger会致使重复输出。
解决方法:设置logger的additivity属性为false。
每一个logger都会关联到logger上下文。默认状况下,logger上下文名称为default。
<contextName>标签:设置logger上下文名称。能够方便区分来自不一样应用程序的记录。
注意:一旦设置logger上下文名称后就不能更改了。
在layout模式里添加“%contextName”就会输出上下文名称。
什么意思呢,举个例子。当你须要将记录输出到文件中的时候,在<appender>中须要用<file>标签指定文件名(一般须要使用绝对路径名),这样固定文件路径可能比较死板,那么还有一种方式,就是经过变量来指定文件路径。
在配置文件中的<configuration>里使用<property>标签设置变量,在<file>标签中使用变量,经过环境变量指定路径就能够,file标签中结合变量与文件名组成文件的完整路径名称。以下图:
示例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>