SpringBoot Logback 日志配置
前言
之前使用 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 个部分组成:
日期时间,精确到毫秒
2021-12-08 10:21:45.585
日志级别
INFO
Logback 的日志级别:ERROR、WARN、INFO、DEBUG 和 TRACE。注意,Logback 不支持 FATAL,会映射给 ERROR。
进程ID
28453
Java(SpringBoot)应用进程ID。
分隔线
---
仅作为日志头(1、2、3)和日志体(5、6、7)之间的分隔线,无实际意义。
线程名称
[ main]
方括号([])内部的字符串即为线程名称。
记录器名称
o.s.b.w.embedded.tomcat.TomcatWebServer
日志记录器(logger)名称,一般使用类名代替。
冒号
:
仅作为日志记录器(6)和日志消息(7)之间的分隔符,无实际意义。
日志消息
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 日志配置的更多相关文章
- SpringBoot Logback日志配置
Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型.级别. ...
- springboot+logback日志输出企业实践(下)
目录 1.引言 2. 输出 logback 状态数据 3. logback 异步输出日志 3.1 异步输出配置 3.2 异步输出原理 4. springboot 多环境下 logback 配置 5. ...
- SpringBoot整合+logback日志配置
本次演示的代码结构如下,基于maven,整合SpringBoot.Spring.Mybaits的SSM框架.同时测试logback日志框架的使用及配置. 1.创建maven工程,修改pom.xml文件 ...
- springboot学习笔记:4.logback日志配置
springboot中日志组件推荐使用logback: 由于springboot内置了logback,所以可以直接在application.properties中配置:如果要功能丰富些,则配置下log ...
- Logback详细整理,基于springboot的日志配置
Logback的配置介绍: 1.Logger.appender及layout Logger作为日志的记录器,把它关联到应用的对应的context上后,主要用于存放日志对象,也可以定义日志类型.级别. ...
- springboot+logback日志输出企业实践(上)
目录 1.引言 2.logback简介 3. springboot默认日志框架-logback 3.1 springboot示例工程搭建 3.2 日志输出与基本配置 3.2.1 日志默认输出 3.2. ...
- SpringBoot中日志配置
背景 由于一些框架中还使用log4j-1.x系列陈旧的日志框架,调试过程中有一些错误信息不能在控制台显示,增加了调试成本.以下配置方法 将帮助你获得log4j-1.x日志在控制台显示. 解决方法: 使 ...
- Logback日志配置的简单使用
Logback介绍 Logback是由log4j创始人设计的又一个开源日志组件.logback当前分成三个模块:logback-core,logback- classic和logback-access ...
- logback日志配置
第一步:加入jar包.要加入slf4j和logback的jar包,slf4j需要的jar包为slf4j-api,logback需要2个jar包(logback-classic.logback-core ...
随机推荐
- centos7 永久修改hostname
1.修改 /etc/sysconfig/network ,重启后还是原来的主机名 2.百度有说明是/etc/rc.d/rc.sysinit下的脚本还原了还来主机名,问题是的我主机上没有这个脚本 3.执 ...
- 攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup
攻防世界 WEB 高手进阶区 TokyoWesterns CTF shrine Writeup 题目介绍 题目考点 模板注入 Writeup 进入题目 import flask import os a ...
- Flink 实践教程 - 入门(4):读取 MySQL 数据写入到 ES
作者:腾讯云流计算 Oceanus 团队 流计算 Oceanus 简介 流计算 Oceanus 是大数据产品生态体系的实时化分析利器,是基于 Apache Flink 构建的具备一站开发.无缝连接. ...
- (数据科学学习手札130)利用geopandas快捷绘制在线地图
本文示例代码及文件已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 在上一篇文章中,我为大家介绍了不久前发布的 ...
- 输入指令npx webpack-dev-server报错:Error: Cannot find module ‘webpack-cli/bin/config-yargs‘的解决方法
输入指令npx webpack-dev-server报错:Error: Cannot find module 'webpack-cli/bin/config-yargs'的解决方法 输入指令:npx ...
- redis异常:(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk.
(error) MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on d ...
- celery config
/* Useful celery config. app = Celery('tasks', broker='redis://localhost:6379', backend='redis://loc ...
- 截取oracle字符串中的数字
方法一:如果Oracle版本不是太低的话,使用 正则表达式函数 REGEXP_SUBSTR 处理. REGEXP_SUBSTR有5个参数,分别是: 第一个是输入的字符串 第二个是正则表达式 第三个是标 ...
- maven中的distributionManagement的作用
mvn install 会将项目生成的构件安装到本地Maven仓库,mvn deploy 用来将项目生成的构件分发到远程Maven仓库. 本地Maven仓库的构件只能供当前用户使用,在分发到远程Ma ...
- 大爽Python入门教程 3-2 条件判断: if...elif..else
大爽Python入门公开课教案 点击查看教程总目录 简单回顾if 回顾下第一章的代码 >>> x = 5 >>> if x > 0: ... print(&q ...