SpringBoot日志框架使用详解
几种常见的日志级别由低到高分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL 。如何理解这个日志级别呢?很简单,如果项目中的日志级别设置为INFO ,那么比它更低级别的日志信息 就看不到了,即是TRACE 、DEBUG日志将会不显示。
常见的日志框架有 log4j 、 logback 、 log4j2 。
log4j这个日志框架显示是耳熟能详了,在Spring开发中是经常使用,但是据说log4j官方已经不再更新了,而且在性能上比logback 、log4j2差了很多。logback是由log4j创始人设计的另外一个开源日志框架,logback相比之于log4j性能提升了10以上, 初始化内存加载也更小了。作为的Spring Boot默认的日志框架肯定是有着不小的优势。log4j2晚于 logback 推出,官网介绍性能比 logback 高,坊间流传,log4j2在很多思想理念上都是照抄logback,因此即便log4j2是Apache官方项目,Spring等许多框架项目没有将它纳入主流。
原则上需要使用logback,需要添加以下依赖,但是既然是默认的日志框架,当然不用重新引入依赖了。
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
使用方式
private final Logger logger = LoggerFactory.getLogger(DemoApplicationTests.class);
上面是基本的使用方式,lombok简化了输出日志的操作。
@Slf4j
class DemoApplicationTests {@Testpublic void test(){log.debug("输出DEBUG日志.......");}
}
如何定制日志级别?
Spring Boot中默认的日志级别是INFO,但是可以自己定制日志级别,还支持 package 级别的日志级别调整,配置如下:
logging.level.root=DEBUG
logging.level.com.example.demo=INFO
日志如何输出到文件?
注意:官方文档说这两个属性不能同时配置,否则不生效,因此只需要配置一个即可。
logging.file.path:指定日志文件的路径logging.file.name:日志的文件名,默认为spring.log
指定输出的文件为当前项目路径的 logs 文件下,默认生成的日志文件为 spring.log ,如下:
logging.file.path=./logs
如何定制日志格式?
- logging.pattern.console :控制台的输出格式
- logging.pattern.file :日志文件的输出格式
例如配置如下:
logging.pattern.console==%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n
logging.pattern.file=%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n
上面的配置编码的含义如下:
%d{HH:mm:ss.SSS} —— 日志输出时间
%thread —— 输出日志的进程名字,这在Web应用以及异步任务处理中很有用
%-5level —— 日志级别,并且使用5个字符靠左对齐
%logger —— 日志输出者的名字
%msg —— 日志消息
%n —— 平台的换行符
如何自定义日志配置?
Spring Boot官方文档指出,根据不同的日志系统,可以按照如下的日志配置文件名就能够被正确加 载,如下:
- Logback :logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
- Log4j :log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
- Log4j2 :log4j2-spring.xml, log4j2.xml
- JDK (Java Util Logging) :logging.properties
SpringBoot官方推荐优先使用带有-spring的文件名作为你的日志配置。因此只需要在 src/resources 文件夹下创建 logback-spring.xml 即可,配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><!-- 定义日志存放目录 --><property name="logPath" value="logs"/><!-- 日志输出的格式--><property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} %L %M - %msg%xEx%n"/><contextName>logback</contextName><!--输出到控制台 ConsoleAppender--><appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender"><!--展示格式 layout--><layout class="ch.qos.logback.classic.PatternLayout"><pattern>${PATTERN}</pattern></layout><!--过滤器,只有过滤到指定级别的日志信息才会输出,如果level为ERROR,那么控制台只会输出ERROR日志--><!-- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">--><!-- <level>ERROR</level>--><!-- </filter>--></appender><!--正常的日志文件,输出到文件中--><appender name="fileDEBUGLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--如果只是想要 Info 级别的日志,只是过滤 info 还是会输出 Error 日志,因为 Error 的级别高,所以我们使用下面的策略,可以避免输出 Error 的日志--><filter class="ch.qos.logback.classic.filter.LevelFilter"><!--过滤 Error--><level>Error</level><!--匹配到就禁止--><onMatch>DENY</onMatch><!--没有匹配到就允许--><onMismatch>ACCEPT</onMismatch></filter><!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。--><File>${logPath}/log_demo.log</File><!--滚动策略,按照时间滚动 TimeBasedRollingPolicy--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间--><FileNamePattern>${logPath}/log_demo_%d{yyyy-MM-dd}.log</FileNamePattern><!--只保留最近90天的日志--><maxHistory>90</maxHistory><!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志--><!--<totalSizeCap>1GB</totalSizeCap>--></rollingPolicy><!--日志输出编码格式化--><encoder><charset>UTF-8</charset><pattern>${PATTERN}</pattern></encoder></appender><!--输出ERROR日志到指定的文件中--><appender name="fileErrorLog" class="ch.qos.logback.core.rolling.RollingFileAppender"><!--如果只是想要 Error 级别的日志,那么需要过滤一下,默认是 info 级别的,ThresholdFilter--><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>Error</level></filter><!--日志名称,如果没有File 属性,那么只会使用FileNamePattern的文件路径规则如果同时有<File>和<FileNamePattern>,那么当天日志是<File>,明天会自动把今天的日志改名为今天的日期。即,<File> 的日志都是当天的。--><File>${logPath}/error.log</File><!--滚动策略,按照时间滚动 TimeBasedRollingPolicy--><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!--文件路径,定义了日志的切分方式——把每一天的日志归档到一个文件中,以防止日志填满整个磁盘空间--><FileNamePattern>${logPath}/error_%d{yyyy-MM-dd}.log</FileNamePattern><!--只保留最近90天的日志--><maxHistory>90</maxHistory><!--用来指定日志文件的上限大小,那么到了这个值,就会删除旧的日志--><!--<totalSizeCap>1GB</totalSizeCap>--></rollingPolicy><!--日志输出编码格式化--><encoder><charset>UTF-8</charset><pattern>${PATTERN}</pattern></encoder></appender><!--指定最基础的日志输出级别--><root level="DEBUG"><!--appender将会添加到这个loger--><appender-ref ref="consoleLog"/><appender-ref ref="fileDEBUGLog"/><appender-ref ref="fileErrorLog"/></root><!-- 定义指定package的日志级别--><logger name="org.springframework" level="DEBUG"></logger><logger name="org.mybatis" level="DEBUG"></logger><logger name="java.sql.Connection" level="DEBUG"></logger><logger name="java.sql.Statement" level="DEBUG"></logger><logger name="java.sql.PreparedStatement" level="DEBUG"></logger><logger name="io.lettuce.*" level="INFO"></logger><logger name="io.netty.*" level="ERROR"></logger><logger name="com.rabbitmq.*" level="DEBUG"></logger><logger name="org.springframework.amqp.*" level="DEBUG"></logger><logger name="org.springframework.scheduling.*" level="DEBUG"></logger><!--定义com.xxx..xx..xx包下的日志信息不上传,直接输出到fileDEBUGLog和fileErrorLog这个两个appender中,日志级别为DEBUG--><logger name="com.xxx.xxx.xx" additivity="false" level="DEBUG"><appender-ref ref="fileDEBUGLog"/><appender-ref ref="fileErrorLog"/></logger>
</configuration>
当然,如果就不想用Spring Boot推荐的名字,想自己定制也行,只需要在配置文件中指定配置文件名 即可,如下:
logging.config=classpath:logging-config.xml
相关文章:
SpringBoot日志框架使用详解
几种常见的日志级别由低到高分为:TRACE < DEBUG < INFO < WARN < ERROR < FATAL 。如何理解这个日志级别呢?很简单,如果项目中的日志级别设置为INFO ,那么比它更低级别的日志信息 就看不到了,即是TRACE…...
剑指offer-消失的数字、数组中出现的次数
消失的数字 解法一:求和相减 假设nums为[0,1,2,4],消失的数字为3,完整的数组应该是[0,1,2,3,4],则sum101247,sum20123410,我们很容易发现 sum2-sum1 01234 - 0124 3,即为消失的数字。因此,我们可以采用先…...
axios请求配置baseURL选项
在src同级目录创建 (1).env.delelopment : 开发模式时调用 (2).env.production :生产模式时调用 (3).env.testing : 测试模式时调用 # 页面标题 VITE_APP_TITLE 若依管理系统# 生产环境配…...
风储VSG-基于虚拟同步发电机的风储并网系统MATLAB仿真
MATLAB2021b版本仿真模型:风力发电机模块、储能控制模块、功率计算模块、VSG控制模块、电压电流双环控制模块。永磁同步风机输出功率、储能系统输出功率以及逆变器输出功率曲线。直流母线电压波动曲线。逆变器输出电压、电流曲线。完整模型见博主资源!&a…...
vim常用命令
vim常用三种模式 命令模式(Command mode) 插入模式(Insert mode) 末行模式(Last line mode) (一)进入命令模式 vi 或者 vim(二)命令模式 -> 插入模式 &…...
华为OD机试 - 最差产品奖 | 机试题算法思路 【2023】
最近更新的博客 华为OD机试 - 简易压缩算法(Python) | 机试题算法思路 【2023】 华为OD机试题 - 获取最大软件版本号(JavaScript) 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】 华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】 华为OD机试 …...
HR:你会Python数据分析吗?
之前看到一个段子: 以前去面试,HR会问你“精通office吗?” 现在去面试,HR会问你“会Python数据分析吗?” 图片来源:网络 大数据时代,无论是数据分析师、研发,到运营、市场、产品经…...
算法18:LeetCode_链表相关算法题
链表无小事,只要是涉及到链表的算法题,边界值的设定尤为重要,而且及其容易出错误。这就要求我们平时多加练习。但是,我们在面试和笔试的过程中往往会碰到链表相关的题目,所以我们在笔试的时候一般都会借助系统提供的工…...
SpringBoot集成Tomcat服务
文章目录一、Tomcat集成1、依赖层级2、自动化配置二、Tomcat架构三、Tomcat配置1、基础配置2、属性配置类3、配置加载分析四、周期管理方法1、控制类2、核心方法使用的成本越低,内部封装越复杂; 一、Tomcat集成 1、依赖层级 在SpringBoot框架的web依赖…...
【机器学习】决策树-C4.5算法
1.C4.5算法 C4.5算法与ID3相似,在ID3的基础上进行了改进,采用信息增益比来选择属性。ID3选择属性用的是子树的信息增益,ID3使用的是熵(entropy, 熵是一种不纯度度量准则),也就是熵的变化值&…...
actipro-winforms-controls-23.1.0 Crack
actipro-winforms一组用于构建漂亮的 Windows 窗体桌面应用程序的 UI 控件,用于构建 IDE 的高级停靠窗口、MDI、属性网格、树控件和文件夹/文件浏览器,用于常见数据类型、自动完成、屏蔽编辑和代码编辑的强大编辑器,功能区、图表、微型图表、…...
适合打游戏用的蓝牙耳机有哪些?吃鸡无延迟的蓝牙耳机推荐
现在手游的兴起,让游戏市场变得更加火爆,各种可以提高玩家体验的外设也越来越多,除了提升操作的外置按键与手柄外,能带来更出色音质与舒心使用的游戏耳机,整体氛围感更好,让玩家在细节上占据优势࿰…...
1000:入门测试题目[不一样的题解][85种写法]【A+B问题】
题目: 1000:入门测试题目 时间限制: 1000 ms 内存限制: 32768 KB 提交数: 262857 通过数: 158152 【题目描述】 求两个整数的和。 【输入】 一行,两个用空格隔开的整数。 【输出】 两个整数的和。 【输入样例】 2 3 【输出样例】…...
FastReport .NET 2023.1.13 Crack
FastReport .NET 使用来自 ADO .NET 数据源的数据。它可以排序和过滤数据行,使用主从关系和查找数据列。一切都可以通过点击几下鼠标来完成。 直接连接到 ADO、MS SQL 或基于 xml 的数据库。其他连接器可作为插件使用。 能够从 IEnumerable 类型的业务对象中获取数…...
unzip: cannot find zipfile directory in one of
下面是执行flutter doctor 后报错内容 End-of-central-directory signature not found. Either this file is not a zipfile, or it constitutes one disk of a multi-part archive. In the latter case the central directory and zipfile comment will be found on the last …...
RFC4543: Galois Message Authentication Code (GMAC);CONFIG_CRYPTO_GCM
在2010年这个算法被Linux社区加进来:说明算法还是挺重要,普遍使用。 commit 73c89c15b959adf06366722c4be8d2eddec0a529 Author: Tobias Brunner <tobias@strongswan.org> Date: Sun Jan 17 21:52:11 2010 +1100crypto: gcm - Add RFC4543 wrapper for GCMThis patc…...
【YOLOv5】 02-标注图片,训练并使用自己的模型
在上一篇文章中,我们完成了YOLOv5的安装和测试。如果想检测自定义目标,就需要用到LabelImg来对图片打标签,本篇文章介绍了LabelImg安装与使用,以及如何训练并使用自己的模型。一、安装LabelImg输入如下命令进行安装:pi…...
2023.2.15日学习内容(用户的增删改查)
1,如果前端时间需要年月日,不需要时分秒,则一般情况下再数据库里面操作即可2.正常情况下,以后所有的查询都不能用* 查询所有列3.删除思路逻辑1)点击删除按钮需要对其进行监听2)对于重要的信息删除应该给用户…...
车载以太网 - 测试用例设计 - 时间参数 - 11
前面已经介绍过DoIP相关的时间参数信息,然而对于时间参数信息相关的测试用例该如何设计呢?个人认为这是用例中最好设计的一类,这类的用例只需要按照定义去设计写测试用例即可,难的是自动化脚本开发和手动测试执行。毕竟时间参数一般都是毫秒级的验证,就算是秒级的我们也很…...
【C#个人错题笔记】
观前提醒 记录一些我不会或者少见的内容,不一定适合所有人 字符串拼接 int a3,b8; Console.WriteLine(ab);//11 Console.WriteLine("ab");//ab Console.WriteLine(a""b);//38 Console.WriteLine("ab"ab);//ab38 Console.WriteLine…...
WebGLStudio.js虚拟文件系统完全指南:如何高效管理3D资源
WebGLStudio.js虚拟文件系统完全指南:如何高效管理3D资源 【免费下载链接】webglstudio.js A full open source 3D graphics editor in the browser, with scene editor, coding pad, graph editor, virtual file system, and many features more. 项目地址: http…...
2026年AI趋势监控平台主流方案解析与场景选型
核心观点摘要 AI趋势监控平台正由被动告警向预测与策略推演演进,实时性与可解释性成为2026年选型首要指标,融合多模态感知与业务知识图谱的方案更具竞争力。选型需综合考量数据接入广度、模型推理时效、行业场景适配度与总体拥有成本,单一性能…...
4大模块构建企业级专利智能分析平台:基于Google Patents Public Data的深度技术解析
4大模块构建企业级专利智能分析平台:基于Google Patents Public Data的深度技术解析 【免费下载链接】patents-public-data Patent analysis using the Google Patents Public Datasets on BigQuery 项目地址: https://gitcode.com/gh_mirrors/pa/patents-public-…...
Vin象棋:基于Yolov5的中国象棋智能视觉辅助系统,重新定义数字化对弈体验
Vin象棋:基于Yolov5的中国象棋智能视觉辅助系统,重新定义数字化对弈体验 【免费下载链接】VinXiangQi Xiangqi syncing tool based on Yolov5 / 基于Yolov5的中国象棋连线工具 项目地址: https://gitcode.com/gh_mirrors/vi/VinXiangQi 在数字化对…...
PyTorch 2.8镜像参数详解:CUDA 12.4驱动550.90.07环境兼容性避坑指南
PyTorch 2.8镜像参数详解:CUDA 12.4驱动550.90.07环境兼容性避坑指南 1. 镜像核心配置解析 PyTorch 2.8深度学习镜像是一个经过深度优化的通用计算环境,专为现代AI工作负载设计。这个镜像最显著的特点是完整适配NVIDIA最新计算架构,基于RTX…...
3 鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战
鸿蒙分布式数据跨终端同步实操方案 | 鸿蒙开发筑基实战 作者:杨建宾(华夏之光永存) 摘要 本文讲解鸿蒙系统下跨终端数据同步的完整实操流程,从权限配置、分布式数据初始化,到数据读写、同步测试,全部使用通…...
如何分析和改善网站的SEO效果
如何分析和改善网站的SEO效果 在当今互联网时代,一个优秀的网站不仅需要内容丰富,还需要有良好的搜索引擎优化(SEO)效果。SEO是提升网站在搜索引擎中排名的关键手段,本文将详细探讨如何分析和改善网站的SEO效果&#…...
如何快速配置Zotero插件:终极管理解决方案与插件市场指南
如何快速配置Zotero插件:终极管理解决方案与插件市场指南 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons …...
Doorkeeper与Active Storage集成终极指南:如何为OAuth认证系统添加文件上传功能 [特殊字符]
Doorkeeper与Active Storage集成终极指南:如何为OAuth认证系统添加文件上传功能 🚀 【免费下载链接】doorkeeper Doorkeeper is an OAuth 2 provider for Ruby on Rails / Grape. 项目地址: https://gitcode.com/gh_mirrors/do/doorkeeper Doorke…...
H5扫码不止‘扫一扫’:深入聊聊vue-qrcode-reader的闪光灯、相册选择和画框绘制这些高级玩法
H5扫码不止‘扫一扫’:深入聊聊vue-qrcode-reader的闪光灯、相册选择和画框绘制这些高级玩法 扫码功能早已成为移动端应用的标配,但大多数开发者止步于基础调用,忽略了用户体验的精细打磨。当产品经理提出"不仅要能用,还要好…...
