SpringBoot 项目中配置日志系统文件 logback-spring.xml 原理和用法介绍

server/2025/1/19 9:12:52/

在 Spring Boot 项目中,logback-spring.xml 是用于配置日志系统的文件,是基于 Logback 框架,主要有以下几点功能:

文章目录

    • 1、日志输出控制
    • 2、日志格式设置
    • 3、日志输出位置
    • 4、日志滚动策略
    • 5、日志级别调整
    • 6、日志条件过滤
    • 7、使用注意事项
    • 8、完整示例代码

1、日志输出控制

  • 可以指定哪些类或包的日志信息应该被输出,以及输出的日志级别。
  • 例如,可以将某些关键业务类的日志级别设置为 DEBUG,以便在开发和测试阶段进行详细的日志记录,方便调试。
  • 将一些基础类或库的日志级别设置为 INFOWARN,避免日志信息过多造成干扰。
<logger name="com.example.business" level="DEBUG"/>
<logger name="org.springframework" level="INFO"/>

这里,com.example.business 包下的日志将以 DEBUG 级别输出,而 org.springframework 包下的日志以 INFO 级别输出。

2、日志格式设置

  • 可以自定义日志的输出格式,包括时间戳、日志级别、线程名、类名、日志消息等元素的排列顺序和格式。
<encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>

上述代码使用 %d 表示时间戳,%thread 表示线程名,%-5level 表示日志级别,%logger{36} 表示日志记录器名称,%msg%n 表示日志消息和换行符。

3、日志输出位置

  • 可以将日志输出到不同的目的地,常见的有控制台和文件。
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>/log/info/info.log</file><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>

上述代码中,CONSOLE 是一个将日志输出到控制台的 Appender,使用了前面定义的日志格式;FILE 是一个将日志输出到文件 /log/info/info.logAppender

4、日志滚动策略

  • 对于输出到文件的日志,可以设置日志滚动策略,以避免日志文件过大。
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>/log/info/info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>/log/info/info-%d{yyyy-MM-dd}.log</fileNamePattern></rollingPolicy><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>

上述代码使用 TimeBasedRollingPolicy 实现了基于时间的日志滚动,每天会生成一个新的日志文件,文件名为 /log/info/info-%d{yyyy-MM-dd}.log

5、日志级别调整

  • 可以根据不同的环境(如开发、测试、生产)动态调整日志级别。
<springProfile name="dev"><logger name="com.wen" level="DEBUG"/>
</springProfile><springProfile name="prod"><logger name="com.wen" level="INFO"/>
</springProfile>

这里使用了 Spring Boot 的 springProfile 特性,在 dev 环境下将 com.wen 包的日志级别设置为 DEBUG,在 prod 环境下设置为 INFO

6、日志条件过滤

  • 可以对日志信息进行过滤,只输出符合特定条件的日志。
<appender name="FILTERED_CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder>
</appender>

上述代码使用 ThresholdFilter 过滤掉级别低于 INFO 的日志,只有 INFO 及以上级别的日志会被输出到控制台。

7、使用注意事项

1、日志文件所带来的优势:

  • 灵活性:可以根据项目的具体需求,灵活配置日志输出,满足不同阶段(开发、测试、生产)和不同场景下的日志需求。
  • 性能优化:通过合理设置日志级别和输出目的地,可以避免不必要的日志输出,提高性能。
  • 可维护性:集中管理日志配置,便于维护和修改,避免在代码中硬编码日志相关的逻辑。

2、配置文件的加载顺序:

Spring Boot 在启动时会自动查找并加载 logback-spring.xml 文件,如果找不到,会尝试加载 logback.xml 文件。建议使用 logback-spring.xml,因为它支持 Spring 的一些特殊配置,如 springProfile,可以根据不同的环境进行不同的日志配置。

  • 配置文件中的文件路径需要根据实际情况进行调整,确保日志文件的存储位置具有足够的权限。
  • 不同的 Appender 可以组合使用,如同时输出到控制台和文件。
  • 对于复杂的日志配置,可以考虑将不同部分拆分成多个 <appender><logger>,以便于维护和管理。

8、完整示例代码

下面代码是一个项目的完整示例代码,使用了上述的一些情况,可用作常见的 SpringBoot 项目。

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false"><property name="log.level" value="debug" /><property name="log.maxHistory" value="30" /><property name="log.filePath" value="log/project/" /><property name="log.pattern"value="%d{yyyy-MM-dd HH:mm:ss:SSS} | [%thread] | [%X{request-id}] | %-5level | %class.%M %L | %msg%n" /><!-- 打印到控制台 --><appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter></appender><!-- INFO --><appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.filePath}/info/info.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 文件名称 --><fileNamePattern>${log.filePath}/info/info-%d{yyyy-MM-dd}.log</fileNamePattern><!-- 文件最大历史数量 --><maxHistory>${log.maxHistory}</maxHistory><!-- 下面这俩可不定义 --><maxFileSize>1GB</maxFileSize><totalSizeCap>128GB</totalSizeCap></rollingPolicy><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter></appender><!-- DEBUG --><appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.filePath}/debug/debug.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.filePath}/debug/%d{yyyy-MM-dd}.log</fileNamePattern><maxHistory>${log.maxHistory}</maxHistory><maxFileSize>1GB</maxFileSize><totalSizeCap>128GB</totalSizeCap></rollingPolicy><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter></appender><!-- ERROR --><appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender"><!-- 文件路径 --><file>${log.filePath}/error/error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 文件名称 --><fileNamePattern>${log.filePath}/error/error-%d{yyyy-MM-dd}.log</fileNamePattern><!-- 文件最大历史数量 --><maxHistory>${log.maxHistory}</maxHistory><maxFileSize>1GB</maxFileSize><totalSizeCap>128GB</totalSizeCap></rollingPolicy><encoder><pattern>${log.pattern}</pattern><charset>UTF-8</charset></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter></appender><logger name="org.redisson" level="info" additivity="false" /><root level="INFO"><appender-ref ref="consoleAppender" /><appender-ref ref="debugAppender" /><appender-ref ref="infoAppender" /><appender-ref ref="errorAppender" /></root>
</configuration>

http://www.ppmy.cn/server/159585.html

相关文章

深度学习篇---数据集分类

文章目录 前言第一部分&#xff1a;VOC数据集标签、COCO数据集格式1.VOC数据集标签的特点及优缺点特点优点缺点 2.COCO数据集标签的特点及优缺点特点优点缺点 3.YOLO数据集标签的特点及优缺点特点优点缺点 第二部分&#xff1a;VOC格式和YOLO格式1.VOC格式3.YOLO格式3.区别(1)文…

什么是Spring Boot 应用开发?

一、引言 在当今的软件开发领域&#xff0c;Java 依然占据着重要的地位&#xff0c;而 Spring Boot 作为 Java 生态系统中极具影响力的框架&#xff0c;极大地简化了企业级应用的开发流程&#xff0c;提升了开发效率和应用的可维护性。它基于 Spring 框架构建&#xff0c;通过…

gesp(C++五级)(8)洛谷:B3969:[GESP202403 五级] B-smooth 数

gesp(C五级)&#xff08;8&#xff09;洛谷&#xff1a;B3969&#xff1a;[GESP202403 五级] B-smooth 数 题目描述 小杨同学想寻找一种名为 $ B $-smooth 数的正整数。 如果一个正整数的最大质因子不超过 $ B $&#xff0c;则该正整数为 $ B $-smooth 数。小杨同学想知道&am…

Vue.js组件开发-如何处理跨域请求

在Vue.js组件开发中&#xff0c;处理跨域请求&#xff08;CORS&#xff0c;即跨来源资源共享&#xff09;通常不是直接在Vue组件中解决的&#xff0c;而是需要后端服务器进行相应的配置&#xff0c;以允许来自不同源的请求。不过&#xff0c;前端开发者也需要了解一些基本的COR…

机器学习(2):线性回归Python实现

1 概念回顾 1.1 模型假设 线性回归模型假设因变量y yy与自变量x xx之间的关系可以用以下线性方程表示&#xff1a; y β 0 β 1 ⋅ X 1 β 2 ⋅ X 2 … β n ⋅ X n ε y 是因变量 (待预测值)&#xff1b;X1, X2, ... Xn 是自变量&#xff08;特征&#xff09;β0, β1,…

SpringBoot3-整合WebSocket指南

更多SpringBoot3内容请关注我的专栏&#xff1a;《SpringBoot3》 期待您的点赞??收藏评论 SpringBoot3-整合WebSocket指南 1. 什么是WebSocket?2. 环境准备 2.1 项目依赖 3. WebSocket配置 3.1 WebSocket配置类3.2 自定义WebSocket处理器 4. 控制器5. 前端实现 5.1 HTML页面…

Linux——动静态库

库的本质实际上就是已经写好的&#xff0c;现有的、可以被复用的代码的集合。库被分为两类&#xff0c;一类是静态库&#xff1a;.a[Linux]、.lib[windows]&#xff1b;一类是&#xff1a;动态库&#xff1a;.so[Linux]、.dll[Windows]。其实这里就会有疑问&#xff0c;为什么我…

【PowerQuery专栏】PowerQuery的函数Excel.WorkBook

对于Excel文件来说,目前有两种不同场景需要使用到Excel函数进行解析: 当前Excel数据解析 Excel.CurrentWorkbook外部引用Excel数据解析 Excel.Workbook这里先来看一下当前Excel当前文件数据的引用,Excel.CurrentWorkbook 是基于当前的Excel中的表对象进行数据…