一、前言
上篇介绍了 Spring Boot Maven 多模块项目的搭建方法以及 MyBatis 的集成。通常在调试接口或者排查问题时我们主要借助于日志,一个设计合理的日志文件配置能大大降低我们的排查难度,本篇主要介绍 Logback 集成步骤。
二、集成 Logback
2.1 引入依赖包
其实 Spring Boot 提供的父工程中已经包含了所依赖的 Logback jar 包,可通过项目父 pom 中的 「spring-boot-starter-parent」>> 「spring-boot-dependencies」找到 Logback 的三个依赖包。
ch.qos.logback logback-access ${logback.version} ch.qos.logback logback-classic ${logback.version} ch.qos.logback logback-core ${logback.version}
2.2 简单日志配置
在自定义日志配置之前我们可以先尝试一下 Spring Boot 默认的日志配置,可通过修改 application.properties 文件中的配置项设置。
① 更改默认日志级别
默认情况下 Spring Boot 从控制台打印出来的日志级别只有 ERROR、WARN、INFO 这三种,如果需要打印 DEBUG 级别的日志,可以使用以下配置项设置。logging.level.root = DEBUG
② 将日志输出到文件中
默认情况下 Spring Boot 只会在控制台打印日志,可以使用「 logging.path 」或「 logging.file 」其中一个配置项将日志输出到文件中。logging.path = ./logs或logging.file = ./logs/demo.log
注意事项:
- logging.path 和 logging.file 都可以是相对路径或者绝对路径
- 但它们两个是不会叠加的,也就是说即使同时配置 logging.path = ./logs 与 logging.file = demo.log 也不会在 ./logs 目录下 生成 demo.log 文件,实际结果是最终只在项目根目录生成了 demo.log 文件。
- 当只配置 logging.path 时,会在该 path 下生成一个 spring.log 文件,该文件名是固定的无法修改,若 path 不存在则会自动创建该路径。
2.3 自定义日志配置
我们可能需要将一些特定包或者特定级别的日志打印到单独的文件中方便排查问题,显然默认的日志配置并不能满足我们需求,需要我们自定义。
2.3.1 Logback XML 基础配置介绍
首先熟悉下常规的配置项,详见:
2.3.2 自定义日志配置文件内容解析
然后在 demo-web 层的 resources 目录下创建名为「 logback.xml 」的文件,具体内容如下:
demo ${log.charset} ${log.pattern} ${log.path}/common.log true ${log.path}/common.%d{yyyy-MM-dd}.log 30 ${log.charset} ${log.pattern} ${log.path}/error.log true ${log.path}/error.%d{yyyy-MM-dd}.%i.log 100MB ERROR ACCEPT DENY ${log.charset} ${log.pattern} ${log.path}/db.log true ${log.path}/db.%d{yyyy-MM-dd}.log ${log.charset} ${log.pattern}
2.3.3 多环境自定义日志配置
然而,上述配置中 <property> 标签的值都是写死的,但我们的项目环境可能有多套,每套环境的日志配置都有所区别,这就需要借助 Spring Boot 提供的 <springProfile> 及 <springProperty> 标签解决。
① 首先将刚才新建的 「 logback.xml 」文件重命名为「 logback-spring.xml 」。
注:因为文件的命名与加载顺序有关,logback.xml 早于 application.properties 加载,而 logback-spring.xml 晚于 application.properties 加载。而且 logback-spring.xml 中 Spring Boot 提供了一些特定的配置项支持,如 <springProperty>、<springProfile>。
② 其次将 <property> 标签定义的配置项改为使用 <springProperty> 标签声明。
注:因为只有使用 <springProperty> 标签才能使用 application.properties 文件中的配置项,它的工作方式与 Logback 标准的 <property> 类似,source 指定 application.properties 文件中的配置项。defaultValue 为默认值。
③ 使用 <springProfile> 标签指定配置生效环境
注:上述配置生效的前提是在 application.properties 文件中指定生效环境(即 spring.profiles.active = dev )
④ 启动项目可以看到在项目根目录生成 logs 目录,目录中有三个日志文件(即 common.log 、db.log 、error.log ),访问 上篇的 接口后 db.log 输出如下日志:
[01-30 17:58:05,296] DEBUG [http-nio-8080-exec-1] selectById[159] - ==> Preparing: SELECT `id`, `user_name` FROM `db_user` WHERE `id` = ? [01-30 17:58:05,317] DEBUG [http-nio-8080-exec-1] selectById[159] - ==> Parameters: 1(Integer)[01-30 17:58:05,373] DEBUG [http-nio-8080-exec-1] selectById[159] - <== Total: 1
三、结语
至此 Spring Boot 集成 Logback 的具体步骤介绍完毕,我们自定义了一个简单的日志配置,也看到了最后的输出结果。后续将继续介绍其余中间件或者工具的集成步骤。