Springboot--整合Logback 日志框架(Maven)

文章目录

  • 前言
  • 一、Logback 日志框架介绍:
  • 二、整合:
    • 2.1 引入jar
    • 2.2 logback.xml 文件配置:
    • 2.3 日志输出:
      • 2.3.1 方式一:
      • 2.3.2 方式二:
    • 2.3 日志输出结果展示:
  • 三、扩展:
    • 3.1 日志输出格式设置:
    • 3.2 日志输出过滤器设置:
  • 总结


前言

在项目调试和运行中,都可能涉及到 日志的输出,本文对springboot 整合Logback 日志框架进行介绍。


一、Logback 日志框架介绍:

Logback 是一个灵活的日志框架,旨在替代传统的 Apache Log4j 框架。它是由 Ceki Gülcü 开发,并且支持 SLF4J 日志接口。Logback 由三个主要模块组成:

  1. Logback Core:Logback 的核心模块,提供了日志事件处理和过滤的基本功能。Logger、Appender、Layout 和 Filter 等关键组件都在这个模块中定义。

  2. Logback Classic:Logback 经典模块,是 Log4j 的改进版本,兼容 Log4j 的 API 和配置文件。Logback Classic 扩展了 Logback Core 模块,提供了更多功能和灵活性。

  3. Logback Access:Logback 访问模块,用于记录 HTTP 请求的访问日志。它可以与 Servlet 容器集成,用于记录 Web 应用程序的访问日志。

Logback 的一些主要特点包括:

  • 性能优秀:Logback 的设计旨在提供高性能的日志记录功能,比传统的 Log4j 框架更快速地处理日志事件。

  • 灵活性:Logback 提供了丰富的配置选项和插件支持,使得用户可以根据需要定制日志记录的行为和格式。

  • SLF4J 兼容:Logback 与 SLF4J(Simple Logging Facade for Java)结合使用,使得应用程序可以灵活地切换不同的日志框架。

  • 支持文件和控制台日志输出:Logback 支持将日志输出到文件、控制台以及其他各种目标,可以根据需求配置输出目的地。

  • 多种过滤器:Logback 提供了多种过滤器选项,可以根据不同的条件过滤日志事件,使得日志输出更加精准。

总之,Logback 是一个功能丰富、灵活性强、性能优秀的日志框架,适用于大多数 Java 应用程序的日志记录需求。可以根据具体的项目需求和喜好选择是否在的应用程序中使用 Logback 框架。

logback 官网;

二、整合:

2.1 引入jar

 <dependency>
    <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
     <version>1.2.12</version>
 </dependency>

maven 版本参考:https://mvnrepository.com/artifact/ch.qos.logback/logback-classic

2.2 logback.xml 文件配置:

logback.xml 是 Logback 日志框架的配置文件,用于指定 Logback 日志系统的行为和属性。通过 logback.xml 文件,可以配置日志输出的格式、目标(比如控制台、文件)、日志级别、滚动策略等。

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="60 seconds" debug="false">
    <!-- 日志存放路径  logs/job 设置为相对项目目录-->
	<property name="log.path" value="logs/job" />
   <!-- 日志输出格式 时间 线程 日志级别 类 方法 对应的行数 输出信息 这样设置后输出格式如下 -->
   <!-- 15:09:27.204 [http-nio-8080-exec-10] DEBUG c.e.s.l.TestLog - [getVersion,26] - debug详细信息 -->
	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />

    <!-- 控制台输出 appender  -->
	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<!-- 日志内容输出格式设置为定义好的 log.pattern-->
			<pattern>${log.pattern}</pattern>
		</encoder>
	</appender>

    <!-- 系统日志输出 appender  class 中的log.pattern 表示日志滚动输出 -->
	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 日志首次输出的文件地址  -->
	    <file>${log.path}/info.log</file>
        <!-- 滚动输出策略:基于时间创建日志文件 ,这样第二天输出的日志,就会按照 fileNamePattern 新建日志文件 -->
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
			<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
		</rollingPolicy>
		<encoder>
			<!-- 日志内容输出格式设置为定义好的 log.pattern-->
			<pattern>${log.pattern}</pattern>
		</encoder>
		<!-- 日志内容输出过滤器 -->
		<filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>INFO</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
	</appender>
    <appender name="file_debug" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/debug.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/debug.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 60天 -->
            <maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>DEBUG</level>
            <!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
            <!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
	    <file>${log.path}/error.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
			<!-- 日志最大的历史 60天 -->
			<maxHistory>60</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${log.pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!-- 过滤的级别 -->
            <level>ERROR</level>
			<!-- 匹配时的操作:接收(记录) -->
            <onMatch>ACCEPT</onMatch>
			<!-- 不匹配时的操作:拒绝(不记录) -->
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- 系统模块日志级别控制 name 设置为你自己的项目根路径 如com.example.logback-->
     <!-- level 设置日志输出的级别为debug 这样系统在进行日志输出时 只要级别在 debug  之后都可以打印 -->
     <!-- 日志输出级别 trace< debug < info< warn < error  -->
    <logger name="com.example.logback" level="debug" />
    <!-- Spring日志级别控制-->
    <logger name="org.springframework" level="warn" />

	<!--系统操作日志 root 根路径的日志级别 info -->
    <root level="info">
    	<!-- 将定义好的几个日志输出 追加到 root 上 -->
    	<!-- console 控制台输出  -->
        <appender-ref ref="console" />
        <!-- console info级别输出  -->
        <appender-ref ref="file_info" />
        <!-- console debug级输出  -->
        <appender-ref ref="file_debug" />
        <!-- console error级输出  -->
        <appender-ref ref="file_error" />
    </root>
</configuration>

2.3 日志输出:

2.3.1 方式一:

类中定义logger 静态量

 static  Logger logger = LoggerFactory.getLogger(TestLog.class);

logger 日志输出:

logger.trace("trace追踪信息");
logger.debug("debug详细信息");
logger.info("info关键信息");
logger.warn("warn警告信息");
logger.error("error错误信息");

2.3.2 方式二:

maven 引入 lombok

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

在类上增加 @Slf4j 注解:

lombok 中 Slf4j 注解源码内容

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.SOURCE)
@Target({ElementType.TYPE})
public @interface Slf4j {
    String topic() default "";
}

logger 日志输出:

 log.trace("trace追踪信息");
log.debug("debug详细信息");
log.info("info关键信息");
log.warn("warn警告信息");
log.error("error错误信息");

2.3 日志输出结果展示:

控制台输出:
在这里插入图片描述

log 日志文件输出:
在这里插入图片描述

日志内容:
在这里插入图片描述

三、扩展:

3.1 日志输出格式设置:

<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20}
 - [%method,%line] - %msg%n" />

在这里插入图片描述

3.2 日志输出过滤器设置:

过滤器写在 Appender 标签内,可以配置一个或多个,按照先后顺序执行。过滤器会对每个级别的日志设置枚举值,表示对日志的处理方式:

在这里插入图片描述

<filter class="ch.qos.logback.classic.filter.LevelFilter">
    <!-- 过滤的级别 TRACE,DEBUG ,INFO,WARN,ERROR -->
    <level>INFO</level>
    <!-- 匹配时的操作:接收(记录) -->
    <onMatch>ACCEPT</onMatch>
    <!-- 不匹配时的操作:拒绝(不记录) -->
    <onMismatch>DENY</onMismatch>
</filter>

在这里插入图片描述


总结

本文对springboot 整合Logback 日志框架进行介绍。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/440414.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

餐饮行业新风口:社区店的成功案例与经营秘诀

在竞争激烈的餐饮行业中&#xff0c;社区店正成为一个新的风口。作为一名90后的鲜奶吧创业者&#xff0c;我在社区开店已经5年时间&#xff0c;下面我将分享一些成功的社区店案例&#xff0c;并揭示其经营秘诀。 1、案例一&#xff1a;特色小吃店 这家小吃店以地方特色美食为…

012集——显示高考天数倒计时——vba实现

以下代码实现高考倒计时&#xff1a; Sub 高考倒计时() 高考日期 CDate("06,07," & Year(Date)) If Date > 高考日期 Then高考日期 CDate("06-07-" & Year(Date) 1) End If 年月日 Year(Date) & "年" & Month(Date) &am…

开发Chrome扩展插件

1.首先开发谷歌chrome扩展插件&#xff0c;没有严格的项目结构目录&#xff0c;但是需要保证里面有一个mainfest.json文件 (必不可少的文件)。在这个文件里有三个属性必不可少&#xff1a;name、version、mainfest_version&#xff1b; // 清单文件的版本&#xff0c;这个必须写…

2024 ssh连接linux ,包括连接被拒的解决方案

这里以windows系统 连接 linux&#xff08;centOS&#xff09;为例&#xff1a; 一、如果windows 连接时出现&#xff1a; Permission denied, please try again. 连接被拒绝&#xff0c;做出以下修改&#xff1a; 打开linux - Terminal 输入&#xff1a;cat /etc/ssh/sshd_c…

【SpringBoot】多环境切换的灵活配置

文章目录 profile 的使用激活 profile 的方式命令行启动idea 中配置配置文件中激活 开发中最灵活的多环境配置创建四个配置主配置文件其他几个环境配置使用方式 配置文件拆分总结 在日常的开发中&#xff0c;一般都会分好几种环境&#xff0c;比如通常的 开发环境&#xff1a;一…

【Linux】 yum —— Linux 的软件包管理器

Linux 的软件包管理器 yum yum 是什么什么是软件包查看软件包 yum 命令行工具yum 配置文件yum 凭什么可以支持下载呢&#xff1f;yum 生态yum 社区yum 的故障排除和资源支持yum 的持续集成和持续交付 yum 是什么 Yum&#xff08;Yellowdog Updater Modified&#xff09;是一个…

【深度学习笔记】优化算法——AdaGrad算法

AdaGrad算法 &#x1f3f7;sec_adagrad 我们从有关特征学习中并不常见的问题入手。 稀疏特征和学习率 假设我们正在训练一个语言模型。 为了获得良好的准确性&#xff0c;我们大多希望在训练的过程中降低学习率&#xff0c;速度通常为 O ( t − 1 2 ) \mathcal{O}(t^{-\fra…

APEX开发过程中需要注意的小细节3

【问题记录】在编辑数据信息时发现辩护的数据无法保存&#xff0c;提示 “ORA-01799: 列不能外部联接到子查询” 仅展示的数据来自主表&#xff0c;这部分都是关联子表重点内容&#xff0c;编辑时无法保存 于是想将扩展表作为主表&#xff0c;在主表进行修改试试 新的报错&a…

【树莓派+python】实现三色呼吸灯+按钮切换

文章目录 Traffic-lights电路连接在这里插入图片描述代码实现算法设计流程图python环境配置三色呼吸灯实现三色呼吸灯按钮控制 Traffic-lights 电路连接 【元件实物图】 图1为Button&#xff0c;按钮的状态控制SIG引脚的电平值。图2为RGB灯&#xff0c;有三种颜色&#xff1a…

jpg 转 ico 强大的图片处理工具 imageMagick

点击下载 windows, mac os, linux版本 GitHub - ImageMagick/ImageMagick: &#x1f9d9;‍♂️ ImageMagick 7 1. windows程序 链接&#xff1a;https://pan.baidu.com/s/1wZLqpcytpCVAl52pIrBBEw 提取码&#xff1a;hbfy 一直点击下一步安装 2. 然后 winr键 打开cmd 然…

动态代理详解

动态代理 一、JDK动态代理二、CGLIB动态代理三、Javassist动态代理技术 在程序运行阶段&#xff0c;在内存中动态生成代理类&#xff0c;被称为动态代理&#xff0c;目的是为了减少代理类的数量。解决代码复用的问题。 一、JDK动态代理 DK动态代理技术&#xff1a;只能代理接口…

备份 ChatGPT 的聊天纪录

备份 ChatGPT 的聊天纪录 ChatGPT 在前阵子发生了不少次对话纪录消失的情况&#xff0c;让许多用户觉得困扰不已&#xff0c;也担心自己想留存的聊天记录消失不见。 好消息是&#xff0c;OpenAI 在 2023 年 4 月 11 日推出了 ChatGPT 聊天记录备份功能&#xff0c;无论是免费…

怎么把视频内容快速转为文字?这三款工具助您轻松实现!

在现代社会&#xff0c;视频内容日益丰富多样&#xff0c;但有时我们更希望获得视频中的文字文稿&#xff0c;以便于搜索、编辑或传播。下面我将为您介绍三款优秀的视频转文字工具&#xff0c;它们能够帮助您快速、准确地将视频内容转换为可编辑的文字格式。让我们一起来看看这…

【JavaEE初阶】 JVM类加载简介

文章目录 &#x1f343;前言&#x1f332;类加载过程&#x1f6a9;加载&#x1f6a9;验证&#x1f6a9;准备&#x1f6a9;解析&#x1f6a9;初始化 &#x1f384;双亲委派模型&#x1f6a9;什么是双亲委派模型&#xff1f;&#x1f6a9;双亲委派模型的优点 ⭕总结 &#x1f343…

微服务:Docker篇

1. 初识Docker 1.1. 什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署&#xff0c;环境不一定一…

JavaScript极速入门(2)

JQuery W3C标准给我们提供了一系列函数,让我们可以操作: 网页内容 网页结构 网页样式 但是原生的JavaScript提供的API操作DOM元素时,代码比较繁琐,冗长.我们学习使用JQuery来操作页面对象. JQuery是一个快速,简洁且功能丰富的JavaScript框架,于2006年发布.它封装JavaScript常…

3dmax画图卡顿解决方法---模大狮模型网

当你在使用3D Max进行画图时遇到卡顿问题&#xff0c;可以尝试以下方法来解决&#xff1a; 减少模型复杂度&#xff1a;如果你的场景中有过多的高细节模型&#xff0c;可能会导致卡顿。尝试减少模型的复杂度&#xff0c;合并或简化多边形数量过多的模型。这将减轻计算机的负担&…

定制红酒:与客户的互动沟通,提升定制满意度

在云仓酒庄洒派&#xff0c;云仓酒庄洒派深知与客户之间的互动沟通对于提升定制满意度至关重要。因此&#xff0c;云仓酒庄洒派始终致力于与消费者建立积极、进一步的沟通&#xff0c;确保他们能够获得满意的红酒定制体验。 首先&#xff0c;云仓酒庄洒派通过多种渠道与客户建立…

扭蛋机小程序开发,互联网时代下的创新发展

近几年&#xff0c;扭蛋机市场迎来新生&#xff0c;逐渐火爆&#xff0c;受到了年轻一代消费者的钟爱。扭蛋机商品价格低廉&#xff0c;种类丰富&#xff0c;根据IP能够不断进行创新&#xff0c;收藏价值极高。在市场的发展下&#xff0c;扭蛋机行业也成为了一个蓝海市场&#…

算法打卡day12|二叉树篇01|144. 二叉树的前序遍历、94. 二叉树的中序遍历、145. 二叉树的后序遍历

二叉树理论基础篇 二叉树的定义 二叉树的定义和链表是差不多的&#xff0c;相对于链表 &#xff0c;二叉树的节点里多了一个指针&#xff0c;一共有两个指针&#xff0c;指向左右孩子。 JAVA的定义如下&#xff0c;需要理解性记忆&#xff0c;因为面试手撕代码可能会用。 p…