logback 是一套日志框架。
Logback 最常用的就是在classpath 定义一个logback.xml 配置文件 从而对日志进行输出。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">

<contextName>logback</contextName>

<property name="log.path" value="F:\\logback.log" />
<!--下面class表示往控制台输出日志-->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<!-- <filter class="com.example.logback.filter.MyFilter" /> -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n
</pattern>
</encoder>
</appender>

<appender name="file"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.path}</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern>
</rollingPolicy>

<encoder>
<pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n
</pattern>
</encoder>
</appender>

<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>

<logger name="com.example.logback" level="warn" />

</configuration>

现分析每个节点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
1 根节点 configuration 
a scan 为true时,配置文件若发生改变,将会被重新加载。
b scanPeriod 设置监测配置文件是否有修改的时间间隔。
c debug 为 true时,打印出Logback内部日志信息。
2 contextName 设置日志上下文名称,可以通过%contextName 来打印日志上下文名称。
3 property 可以用来设置变量 通过 ${name} 访问
<property file="/configuration/variables.properties" />
resource作用和file一样,但是可以直接从classpath路径下引入配置文件。
4. appender格式化日志输出节点,有name 和 class 属性。class 用来指定哪种输出策略。appender有以下子节点。
a. encoder和pattern节点组合用于具体输出的日志格式
b. file节点用来指明日志文件的输出位置,可以是绝对路径也可以是相对路径
c. rollingPolicy日志回滚策略,在这里我们用了TimeBasedRollingPolicy,基于时间的回滚策略,有以下子节点
d.fileNamePattern,必要节点,可以用来设置指定时间的日志归档,例如我们上面的例子是每天将日志归档成一个zip包
5 root 节点 用来指定最基础的日志输出级别
<root level="debug">
<appender-ref ref="console" />
<appender-ref ref="file" />
<!--ref中间的 console file 都是前面appender 的名字,表示选择输出到哪里 -->
</root>