前言
项目中日志系统是必不可少的,目前比较流行的日志框架有 log4j、logback 等,可能大家还不知道,这两个框架的作者是同一个人,Logback 旨在作为流行的 log4j 项目的后续版本,从而恢复 log4j 离开的位置。
另外 slf4j(Simple Logging Facade for Java) 则是一个日志门面框架,提供了日志系统中常用的接口,logback 和 log4j 则对slf4j 进行了实现。
我们本文将讲述如何在 SpringBoot 中应用 logback+slf4j 实现日志的记录。
为什么使用logback
- Logback 是log4j 框架的作者开发的新一代日志框架,它效率更高、能够适应诸多的运行环境,同时天然支持 SLF4J。
- Logback 的定制性更加灵活,同时也是 SpringBoot 的内置日志框架。
开始使用
一、添加依赖
实际开发中我们直接引入spring-boot-starter-web
依赖即可,因为spring-boot-starter-web
包含了spring-boot-starter
。
而spring-boot-starter
包含了spring-boot-starter-logging
,所以我们只需要引入 web 组件即可。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
二、默认配置
默认情况下 SpringBoot 将日志输出到控制台,不会写到日志文件。
如果要编写除控制台输出之外的日志文件,则需在 application.properties 中设置 logging.file 或 logging.path 属性。
注:二者不能同时使用,如若同时使用,则只有 logging.file 生效。
- logging.file=文件名(设置文件,可以是绝对路径,也可以是相对路径。例:logging.file=my.log)
- logging.path=日志文件路径(设置目录,会在该目录下创建spring.log文件,并写入日志内容。例:logging.path=/var/log)
- logging.level.包名=指定包下的日志级别
- logging.pattern.console=日志打印规则
可以看到这种方式配置简单,但是能实现的功能也非常有限,如果想要更复杂的需求,就需要下面的定制化配置了。
三、logback-spring.xml详解
SpringBoot 官方推荐优先使用带有-spring
的文件名作为你的日志配置(如使用logback-spring.xml
,而不是logback.xml
),命名为logback-spring.xml
的日志配置文件,将 xml 放至src/main/resource
下面。
也可以使用自定义的名称,比如logback-config.xml
,只需要在 application.properties 文件中使用logging.config=classpath:logback-config.xml
指定即可。
在讲解 logback-spring.xml之前我们先来了解三个单词:
- Logger(记录器)
- Appenders(附加器)
- Layouts(布局)
Logback 基于三个主要类:Logger,Appender和Layout。
这三种类型的组件协同工作,使开发人员能够根据消息类型和级别记录消息,并在运行时控制这些消息的格式以及报告的位置。
首先给出一个基本的 xml 配置如下:
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<!-- encoders are assigned the type
ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="chapters.configuration" level="INFO"/>
<!-- Strictly speaking, the level attribute is not necessary since -->
<!-- the level of the root level is set to DEBUG by default. -->
<root level="DEBUG">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3.1、<configuration>
元素
logback.xml 配置文件的基本结构可以描述为<configuration>
元素,包含零个或多个<appender>
元素,后跟零个或多个<logger>
元素,后跟最多一个<root>
元素(也可以没有)。
下图说明了这种基本结构:
configuration元素
3.2、<logger>
元素
<logger>
元素只接受一个必需的 name 属性,一个可选的 level 属性和一个可选的 additivity 属性,允许值为 true 或 false 。
level 属性的值允许一个不区分大小写的字符串值 TRACE,DEBUG,INFO,WARN,ERROR,ALL 或 OFF。
<logger>
元素可以包含零个或多个<appender-ref>
元素。
这样引用的每个 appender 都被添加到指定的