前言

之前使用 SpringBoot 的时候,总是习惯于将日志框架切换为 Log4j2,可能是觉得比较靠谱,也可能年龄大了比较排斥新东西。今天搞新项目的时候,想着每次搞这个迁移有点儿麻烦,就想着看看 Logback 这个 SpringBoot 一直默认集成(推荐)使用的框架具体是个什么样子,参考Spring 官方文档日志章节实践下来感觉不错,翻译和补充一下关键知识点。

:本文仅涉及 SpringBoot 和 Logback 集成使用的相关内容,关于 Logback 的详细内容请自行参考官网

日志格式

以 SpringBoot 应用启动的一行日志为例:

2021-12-08 10:21:45.585  INFO 28453 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)

日志由以下 8 个部分组成:

  1. 日期时间,精确到毫秒

    2021-12-08 10:21:45.585
  2. 日志级别

    INFO

    Logback 的日志级别:ERROR、WARN、INFO、DEBUG 和 TRACE。注意,Logback 不支持 FATAL,会映射给 ERROR。

  3. 进程ID

    28453

    Java(SpringBoot)应用进程ID。

  4. 分隔线

    ---

    仅作为日志头(1、2、3)和日志体(5、6、7)之间的分隔线,无实际意义。

  5. 线程名称

    [           main]

    方括号([])内部的字符串即为线程名称。

  6. 记录器名称

    o.s.b.w.embedded.tomcat.TomcatWebServer

    日志记录器(logger)名称,一般使用类名代替。

  7. 冒号

    :

    仅作为日志记录器(6)和日志消息(7)之间的分隔符,无实际意义。

  8. 日志消息

    Tomcat initialized with port(s): 8080 (http)

    日志消息内容。

日志输出

默认情况下,SpringBoot 仅会输出日志至控制台(Console),如果需要输出至日志文件,需要通过配置属性 logging.file.name 或 logging.file.path 开启日志文件输出功能。

两个配置属性二选一即可,本文以 logging.file.name 为例:

logging:
file:
name: /tmp/boot.log

日志输出至控制台的同时,也会输出至日志文件 /tmp/boot.log,该日志文件大小达到 10 MB 时,会发生日志轮替:

boot.log

boot.log.2021-12-08.0.gz
boot.log.2021-12-08.1.gz
boot.log.2021-12-08.2.gz
boot.log.2021-12-08.3.gz

日志会以 天(日期,如:2021-12-08)为单位进行归档压缩(GZ 格式),考虑到该 天 内可能会有多个归档文件,归档压缩文件名称中会包含有序号(如:0、1、2、3)。

日志轮替

我们也可以通过配置属性自定义日志轮替过程:

logging:
file:
name: /tmp/boot.log
logback:
rollingpolicy:
file-name-pattern: /tmp/boot-%d{yyyy-MM-dd}.%i.log
clean-history-on-start: false
max-file-size: 1GB
total-size-cap: 10GB
max-history: 7

日志轮替底层使用的是 Logback SizeAndTimeBasedRollingPolicy,同时支持按照 日志时间日志大小 进行归档。

  • logging.logback.rollingpolicy.file-name-pattern

    归档文件名称模式,即:按照什么样的规则生成归档文件名称,文件名称中可以包含时间和序号。

    时间,表示按日志时间归档,使用 %d{...} 用于指定具体的日期时间格式(Java SimpleDateFormat), yyyy-MM-dd 表示按天(日期)归档(按日志时间归档);

    序号,表示同一个归档时间下,因日志大小达到阈值,日志归档多次产生多个归档文件的序号;

    boot.log
    boot-2021-12-08.0.log
    boot-2021-12-08.1.log
    boot-2021-12-08.2.log
    boot-2021-12-08.3.log
    ......
  • logging.logback.rollingpolicy.max-file-size

    日志文件大小最大值,使用 KB/MB/GB/... 为单位进行指定;日志文件大小超过设置的最大值,会进行日志归档(按日志大小归档)。

  • logging.logback.rollingpolicy.total-size-cap

    日志文件(日志文件 + 归档文件)总大小,使用 KB/MB/GB/... 为单位进行指定;日志文件总大小超过设置的值,会删除老(旧)的归档文件,直到日志文件总大小小于设置的值。

  • logging.logback.rollingpolicy.max-history

    归档日志文件保留天数,归档时间超出保留天数范围的归档文件会被删除。

  • logging.logback.rollingpolicy.clean-history-on-start

    归档文件的删除是在日志输出过程中执行的,这个属性可以指定应用启动时是否执行一次归档文档(因日志时间或大小)的删除,true 为执行,false 为不执行。

日志级别

日志记录器(logger)是有层次结构的,我们可以为不同的层次的记录器指定不同的日志输出级别。

指定根(root)记录器日志输出级别:

logging:
level:
root: info

如前文所述,日志记录器的名称通常是类名,我们可以认为日志记录器的层次结构是按照类名结构设计的:

父包名 + 若干子包名 + 类名

以 com.aopeila.meetu.boot.api.Main 为例,我们可以按照如下方式分别指定不同层次日志记录器的输出级别:

logging:
level:
com: debug
com.aopeila: info
com.aopeila.meetu: warn
com.aopeila.meetu.boot.api.Main: error

日志记录器会按 最长前缀匹配 计算日志应使用的输出级别,如果没有匹配到,则使用根记录器的日志输出级别。

日志分组

我们可以把相关的一些日志记录器(logger)合并为一个分组(group),然后以分组为单位进行配置。

比如,可以把所有 Tomcat 相关的日志记录器合并为一个分组:

logging:
group:
tomcat: "org.apache.catalina,org.apache.coyote,org.apache.tomcat"

我们把以下日志记录器:

org.apache.catalina

org.apache.coyote

org.apache.tomcat

合并为一个分组 tomcat。

然后就可以使用分组 tomcat 进行日志属性的配置,如统一设置日志级别:

logging:
level:
tomcat: "trace"

将分组 tomcat 日志级别设置为 trace,也就是将前面提到的三个日志记录器的日志级别设置为 trace。

小结

SpringBoot 默认集成 Logback 提供的日志功能,应该可以满足我们日常大部分需求场景,配置也比较简单,推荐大家在实际项目中使用。

SpringBoot Logback 日志配置的更多相关文章

  1. SpringBoot Logback日志配置

    Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型.级别. ...

  2. springboot+logback日志输出企业实践(下)

    目录 1.引言 2. 输出 logback 状态数据 3. logback 异步输出日志 3.1 异步输出配置 3.2 异步输出原理 4. springboot 多环境下 logback 配置 5. ...

  3. SpringBoot整合+logback日志配置

    本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 ...

  4. springboot学习笔记:4.logback日志配置

    springboot中日志组件推荐使用logback: 由于springboot内置了logback,所以可以直接在application.properties中配置:如果要功能丰富些,则配置下log ...

  5. Logback详细整理,基于springboot的日志配置

    Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型.级别. ...

  6. springboot+logback日志输出企业实践(上)

    目录 1.引言 2.logback简介 3. springboot默认日志框架-logback 3.1 springboot示例工程搭建 3.2 日志输出与基本配置 3.2.1 日志默认输出 3.2. ...

  7. SpringBoot中日志配置

    背景 由于一些框架中还使用log4j-1.x系列陈旧的日志框架,调试过程中有一些错误信息不能在控制台显示,增加了调试成本.以下配置方法 将帮助你获得log4j-1.x日志在控制台显示. 解决方法: 使 ...

  8. Logback日志配置的简单使用

    Logback介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access ...

  9. logback日志配置

    第一步:加入jar包.要加入slf4j和logback的jar包,slf4j需要的jar包为slf4j-api,logback需要2个jar包(logback-classic.logback-core ...

随机推荐

  1. PCIE笔记--PCIe错误定义与分类

    转载地址:http://blog.chinaaet.com/justlxy/p/5100057782 前面的文章提到过,PCI总线中定义两个边带信号(PERR#和SERR#)来处理总线错误.其中PER ...

  2. linux切换shell

    1. $SHELL这一环境变量用于保存当前用户使用的shell,所以我们可以输出$SHELL来查看当前使用的shell是什么: 2. 查看/etc/shells文件,可以看到当前系统中安装的有效的sh ...

  3. 攻防世界 Misc 新手练习区 ext3 bugku Writeup

    攻防世界 Misc 新手练习区 ext3 bugku Writeup 题目介绍 题目考点 WinHex工具的使用 linux磁盘挂载mount命令 Writeup 下载附件拖进winhex分析一下,查 ...

  4. vue脚手架配置代理

    vue.config.js配置具体代理规则 module.exports = { devServer: { proxy: { '/api1': { // 匹配所有以 '/api1'开头的请求路径 ta ...

  5. webpack 之开发环境优化 source-map

    webpack 之开发环境优化 source-map /** * source-map:一种 提供源代码到构建后代码映射 技术 (如果构建后代码出错了,通过映射可以追踪源代码错误) * [inline ...

  6. VLAN实验

    VLAN实验 如图所示:图中共有四个广播域,左边逻辑的分为两个广播域,右边也是逻辑的分为两个广播域, 配置顺序先配置交换机,在配置路由器 SW1 配置: 1.首先创建vlan [sw1]vlan ba ...

  7. [啃书] 第3篇 - 结构体及其操作/浮点数&圆周率/复杂度/测试

    啃书部分已单独做成Gitbook了,后续不再更新.详情访问个人网站ccoding.cn或ccbyte.github.io 前言 本篇总结自<算法笔记>2.8-2.10 正文 知识点1:结构 ...

  8. (一)初识MySQL

    JavaEE:企业级Java开发  Web 前端(页面:展示,数据) 后台(连接点,连接数据库JDBC,链接前端(控制,控制视图跳转和给前端传递数据)) 数据库(存数据,Txt,Excel,word) ...

  9. 说透 Docker:基础

    既然要学习 K8S,相信各位读者都已经使用过 Docker 了,Docker 的入门是比较容易的,但 Docker 的网络和存储.虚拟化是相当复杂的,Docker 的技术点比较多,在本章中将会深入介绍 ...

  10. python 函数的定义及调用语法,map 方法,函数嵌套递归

    1.什么是函数    开发程序时候,需要代码执行多次,为了提高编写效率及代码重用性,所以把具有独立功能的代码块组织为一个小模块,给这个功能一个名称,这就是函数.    函数可以使用系统自带的函数也可以 ...