【基础系列】日志管理之logback配置文件

文章目录
  1. I. logback配置
    1. 1. appender
      1. a. 控制台or文件的选择
      2. b. 输出格式
      3. c. 日志归档相关
    2. 2. logger
  2. II. 使用
  3. III. 其他
    1. 0. 项目
    2. 1. 一灰灰Blog
    3. 2. 声明
    4. 3. 扫描关注

SpringBoot默认选用logback进行日志管理,前一篇讲述了默认配置日志的参数,然而这些内容比较初级,并不一定能满足我们更加特殊的需求(比如输出到多个不同的配置文件,不同的包路劲选择不同的输出方式等)

所以本篇的内容,主要介绍logback.xml配置文件的语法,虽然与SpringBoot本身没有太多的关联性,但在SpringBoot项目中却非常实用

I. logback配置

也不针对语法进行逐一说明了,直接针对常见的xml配置文件进行分析,反正看完也会忘的,等到要用的时候,一般都是拷贝一个魔板,改改名啥的就over了

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
55
56
57
58
59
60
61
62
63
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, -->
<!-- appender是configuration的子节点,是负责写日志的组件。 -->
<!-- ConsoleAppender:把日志输出到控制台 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern>
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
<charset>UTF-8</charset>
</encoder>
</appender>

<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名-->
<appender name="story" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<File>logs/story.log</File>
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
<!-- 文件名:log/demo.2018-06-23.0.log -->
<fileNamePattern>logs/arch/story.%d.%i.log</fileNamePattern>
<!-- 每产生一个日志文件,该日志文件的保存期限为3天 -->
<maxHistory>3</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成1KB看效果 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!-- pattern节点,用来设置日志的输入格式 -->
<pattern>
%d %p (%file:%line\)- %m%n
</pattern>
<!-- 记录日志的编码:此处设置字符集 - -->
<charset>UTF-8</charset>
</encoder>
</appender>

<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
<!-- additivity=false 表示匹配之后,不再继续传递给其他的logger-->
<logger name="com.git.hui" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="story"/>
</logger>

<logger name="com.github.hui" level="DEBUG" additivity="false">
<appender-ref ref="STDOUT"/>
<appender-ref ref="story"/>
</logger>

<!-- 控制台输出日志级别 -->
<root level="INFO">
<appender-ref ref="STDOUT"/>
</root>
</configuration>

1. appender

从前面的配置文件中,appender这个标签算是比较重要的,上面定义了两类,一个控制台输出,一个文件输出

a. 控制台or文件的选择

appender的class属性来选择

  • 控制台: ch.qos.logback.core.ConsoleAppender
  • 滚动时间窗口文件:ch.qos.logback.core.rolling.RollingFileAppender

b. 输出格式

以实例 <pattern>%d [%t] %-5level %logger{36}.%M\(%file:%line\) - %msg%n</pattern> 进行说明

  • %m输出的信息,
  • %p日志级别,
  • %t线程名,
  • %d日期,
  • %c类的全名,
  • %i索引【从数字0开始递增】
  • %M方法名
  • %lines输出日志的行数
  • %F/%file源码文件名

c. 日志归档相关

一般是每天归档一下日志文件,避免所有的日志都堆积到一个文件,当单文件特别大时,分析也不是一件容易的事情,常见的两个设置参数

1
2
3
4
5
6
<!-- 日志文件最多保存三天 -->
<maxHistory>3</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成1KB看效果 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>

2. logger

另外一个标签就是logger了,name表示哪些包路径下的日志输出会匹配这个(或者logger直接使用了这个name,也会匹配他)

另外两个重要的属性,level表示输出日志的级别,挺实用的,可以根据实际场景设置某些日志输出,如框架层我只关系WARN级别日志;我自己的业务可能就像关注INFO的日志了

additivity 这个属性,很容易不设置,如果不设置,那么当一个日志输出,有多个logger匹配时,这个日志就会被输出多次,建议设置为false

II. 使用

根据前面配置的博文说明,logback.xml配置文件,推荐的用法是

  • 命名为 logback-spring.xml
  • 放在资源文件的根目录,或者config目录下

一般输出日志的用法,最常见的两种方式

1
2
3
4
5
// 创建LOGGER对象
private static final Logger LOGGER = LoggerFactory.getLogger(SelfBeanLoader.class);

// 输出日志的地方
LOGGER.info("info: {}", xxxx);

第二中就是使用lombok的 @Slf4j 注解

1
2
3
4
5
6
@Slf4j
public class SelfBeanLoader {
...
// 输出日志的地方
log.info("xxx");
}

III. 其他

0. 项目

推荐相关博文阅读

1. 一灰灰Blog

一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

2. 声明

尽信书则不如,以上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

3. 扫描关注

一灰灰blog

QrCode

知识星球

goals


打赏 如果觉得我的文章对您有帮助,请随意打赏。
分享到