项目搭建[1]logback的使用与配置

日志框架的作用

  • 定制输出目标
    可以选择输出到控制台或文件等
  • 定制输出格式
    可以为输出内容配置公用的格式
  • 携带上下文信息
    可以携带类信息,时间信息等上下文信息
  • 运行时选择性输出
    可以只输出部分等级,部分类的日志
  • 灵活的配置
    可以选择按天滚动等
  • 优异的性能
    System.out.println会添加synchronized方法锁,会极大地影响系统性能

logback所需jar包

springboot在spring-boot-starter-web中内嵌了logback的模块,所以不用额外引用包.若不使用springboot,需要导入如下两个包:

  1. logback-core-xxx.jar

  2. logback-classic-xxx.jar

包的依赖关系可以使用如下指令来查看:

1
mvn dependency:tree

Spring Test中使用Logback

普通引入:

1
2
3
4
5
6
7
8
9
10
11
12
13
@RunWith(SpringRunner.class)
@SpringBootTest
public class LoggerTest {

private final Logger logger = LoggerFactory.getLogger(LoggerTest.class);

@Test
public void test1() {
logger.debug("debug..."); // 系统默认的日志级别是info.这里不会打印
logger.info("info...");
logger.error("error...");
}
}

lombok简化引入:

1
2
3
4
5
6
7
8
9
10
@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class LoggerTest {
@Test
public void test1() {
log.debug("debug...");
log.info("info...");
}
}

使用配置文件

在resources目录下新建logback-spring.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
<?xml version="1.0" encoding="UTF-8" ?>

<configuration>
<!-- 控制台输出 -->
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread]%c %M %L: %m%n
</pattern>
</layout>
</appender>
<!-- INFO及WARN等级输出 -->
<appender name="fileInfoLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 表示忽略ERROR等级的输出 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略(按时间滚动,默认按天滚动)-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--输出路径-->
<fileNamePattern>./log/info-%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!-- ERROR等级输出 -->
<appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 表示输出ERROR等级及以上的日志文件 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>
%msg%n
</pattern>
</encoder>
<!--滚动策略-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--路径-->
<fileNamePattern>./log/error-%d.log</fileNamePattern>
</rollingPolicy>
</appender>
<!-- -->
<root level="info">
<appender-ref ref="consoleLog" />
<appender-ref ref="fileInfoLog" />
<appender-ref ref="fileErrorLog" />
</root>
</configuration>

常用pattern说明

pattern 意义
%d{pattern} 日期
%m 或 %msg 信息
%c{length} logger名,默认输出全路径,当length大于路径长度输出全路径,length为0只输出类名,否则输出路径首字母及类名
%M method
%L 行号
%thread 线程名称
%-5level 等级
%n 换行