Logback日志框架配置使用

一、简述

Logback一个通用、快速而又灵活的Java日志框架。主要分为三个模块组成

  • logback-core: 其他两个模块的基础模块
  • logback-classic: 由log4j的改良版本,完整实现了slf4j的API,所以可以很方便的更换成其他日志系统如log4j或者JDK14 Logging
  • logback-access:访问模块和Servlet容器集成提供通过Http来访问日志的功能

二、文件引用

通常情况下,并不需要在pom.xml文件中显式添加logback的Maven依赖。因为SpringBoot默认使用Spring Boot Starter依赖项来管理日志记录,里面包含了logback的依赖,并且也做了相关的默认日志设置。

如果想自定义配置,可以在src/main/resources目录下添加logback-spring.xml(官方推荐的名字,而不是logback.xml)的配置文件,SpringBoot会自动加载,如果想使用其他名称可以在配置处指定

logging.config=classpath:logback.xml

三、标签说明使用

3.1、<property>声明变量,方便后面引用

<property name="log.path" value="logs/gateway"/>

这样就声明了一个log.path的变量,想要使用则${log.path}

3.2、<appender>自定义和配置日志输出目标

在Logback 中使用<appender>来指定日志输出位置和格式等等,可以将日志输出到不同的目标,如控制台,文件,数据库等。

  • name 用来指定appender的名称,在配置文件中是唯一标识

  • class :用来指定实现类,Logback提供了多种自带的实现类,如:

    • ConsoleAppender控制台输出
    • FileAppender 或者RollingFileAppender文件输出
    • DBAppender 数据库
  • 其他配置项

    根据实现不同的类,可以设置有些相关的配置项,如文件路径,输出格式,滚动策略等。

3.3、<encoder>日志编码器标签

<encoder><pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern>
</encoder>
  • encoder 标签是Logback 配置文件中用于定义和配置日志事件的编码器的标签

  • patternencoder重要的配置项,用来指定日志输出格式,包括日期时间、日志级别、线程信息、日志内容等等。常用的占位符有:

    占位符说明
    %d日期时间
    %level日志级别,如 DEBUG、INFO、WARN、ERROR 等
    %logger日志记录器的名称
    %thread线程名称
    %msg日志消息内容
    %n换行符
    %class出日志所在类的名称
    %file日志所在文件名
    %line所在日志行号
    其他

3.4、<logger>指定日志级别

<logger name="com.learn" level="debug"/>

<logger> 可以为不同的包或者类设置不同的日志级别

3.5、<filter>指定日志级别

<filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level>
</filter>

<filter> 标签用于定义过滤器,它可以用于对特定的日志事件进行筛选和处理。过滤器可根据指定的条件决定是否传递或忽略某个日志事件。

logback 提供了多种类型的过滤器,每种类型都有相应的配置属性。以下是一些常见的过滤器类型及其作用:

  • ThresholdFilter(阈值过滤器):根据日志事件的级别进行过滤,只传递满足指定级别要求的事件。

  • LevelFilter(级别过滤器):允许或拒绝特定的日志级别。可以设置最小和最大级别,只保留在范围内的日志事件。

  • TimeFilter(时间过滤器):根据日志事件的时间戳进行过滤,只传递在指定时间范围内的事件。

  • MarkerFilter(标记过滤器):根据事件的标记(Marker)进行过滤,只传递符合指定标记要求的事件。

    <filter class="ch.qos.logback.classic.filter.MarkerFilter"><!-- 指定需要接受的 Marker 名称 --><marker>MY_MARKER</marker><!-- 设置 onMatch 和 onMismatch 的操作 --><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter>
    
     // 获取日志记录器private static final Logger logger = LoggerFactory.getLogger(MyApp.class);// 创建自定义标记private static final Marker MY_MARKER = MarkerFactory.getMarker("MY_MARKER");public static void main(String[] args) {// 输出具有自定义标记的日志事件logger.info(MY_MARKER, "This log event has the MY_MARKER marker");}
    

3.6、<root> 全局日志配置

  <root level="INFO"><!-- 将日志事件输出到控制台 --><appender-ref ref="CONSOLE" /><appender-ref ref="debug"/></root>

<root> 标签用来定义跟日志记录器的配置。这里指定了INFO的级别是指日志记录的级别,在日志级别中它与<logger>相比,<logger>的优先级更高。

并且可以为根日志记录器定义多个输出目标(appender),以将日志事件发送到不同的地方,如控制台、文件、数据库等。

3.7、<springProfile> 不同环境配置

<springProfile name="dev"><logger name="com.learn" level="debug"/><!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 --><root level="INFO"><appender-ref ref="console"/><appender-ref ref="debug"/><appender-ref ref="error"/></root>
</springProfile>

<springProfile> 标签是 Logback 提供的特殊标签

在SpringBoot中每个环境有不同的配置参数,logback日志管理也支持多环境参数配置,与Spring Profile 关联起来,根据当前的环境决定是否加载特定的日志输出配置。

四、一些常用的配置

4.1、彩色日志依赖

<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wex"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord="wEx"converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>

这里只是设置了彩色打印日志的依赖,但并还没有设置,需要在日志打印格式里配置

<appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern></encoder>
</appender>

4.2、RollingFileAppender滚筒日志文件输出

	<appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/debug.log</file><!--当触发指定条件时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyyMMdd}/debug.%i.log</fileNamePattern><maxFileSize>20MB</maxFileSize><maxHistory>15</maxHistory></rollingPolicy><encoder><pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern></encoder></appender>

五、实例

<?xml version="1.0" encoding="UTF-8"?><configuration debug="false" scan="false"><property name="log.path" value="logs/gateway"/><!-- 彩色日志格式 --><property name="CONSOLE_LOG_PATTERN"value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><!-- 彩色日志依赖的渲染类 --><conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/><conversionRule conversionWord="wex"converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/><conversionRule conversionWord="wEx"converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/><!-- Console log output --><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${CONSOLE_LOG_PATTERN}</pattern></encoder></appender><!-- Log file debug output --><appender name="debug" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/debug.log</file><!--当触发指定条件时,决定RollingFileAppender的行为,涉及文件移动和重命名。属性class定义具体的滚动策略类。--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyyMMdd}/debug.%i.log</fileNamePattern><maxFileSize>20MB</maxFileSize><maxHistory>15</maxHistory></rollingPolicy><encoder><pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern></encoder></appender><!-- Log file error output --><appender name="error" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/error.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM}/error.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><maxFileSize>50MB</maxFileSize><maxHistory>30</maxHistory></rollingPolicy><encoder><pattern>%date [%thread] %-5level [%logger{50}] %file:%line - %msg%n</pattern></encoder><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter></appender><springProfile name="dev"><logger name="com.learn" level="debug"/><!-- Level: FATAL 0  ERROR 3  WARN 4  INFO 6  DEBUG 7 --><root level="INFO"><appender-ref ref="console"/><appender-ref ref="debug"/><appender-ref ref="error"/></root></springProfile></configuration>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将eNSP Pro部署在华为云是什么体验

eNSP Pro简介 eNSP Pro 是华为公司数据通信产品线新推出的数通设备模拟器&#xff0c;主要应用在数据通信技能培训&#xff0c;为使用者提供华为数据通信产品设备命令行学习环境。 具备的能力 多产品模拟能力&#xff1a;支持数据通信产品线NE路由器、CE交换机、S交换机、AR…

Spring-3-Spring AOP概念全面解析

今日目标 能够理解AOP的作用 能够完成AOP的入门案例 能够理解AOP的工作流程 能够说出AOP的五种通知类型 一、AOP 1 AOP简介 思考&#xff1a;什么是AOP,AOP的作用是什么&#xff1f; 1.1 AOP简介和作用【理解】 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;一…

AveMaria 传播手段的变化

AveMaria 是一种最早在 2018 年 12 月出现的窃密木马&#xff0c;攻击者越来越喜欢使用其进行攻击&#xff0c;运营方也一直在持续更新和升级。在过去六个月中&#xff0c;研究人员观察到 AveMaria 的传播手段发生了许多变化。 2022 年 12 月攻击行动 研究人员发现了名为 .Vh…

Django模板语法,带你快速入门

目录 案例一&#xff1a;登录页面 案例二&#xff1a;for案例 if案例——单个字符串的传递&#xff0c;列表的传递&#xff0c;字典的传递 模板语法其本质&#xff1a;本质上&#xff0c;Django的模板语法就是在html中&#xff0c;写一些占位符&#xff0c;由数据对这些占位符…

Keepalived+LVS部署高可用集群

文章目录 KeepalivedLVS(DR)部署高可用Web集群集群环境MASTER配置BACKUP配置检查Virtual IP是否漂移IPVS检查MASTERBACKUP Real Server配置附上个人写的小脚本 测试停用Real Server某一台的Apache服务停用Master上的keepalived检测Backup是否接管资源 KeepalivedLVS(DR)部署高可…

二叉树的遍历

二叉树的遍历 关于二叉树的遍历方式&#xff0c;要知道二叉树遍历的基本方式都有哪些。二叉树主要有两种遍历方式&#xff1a; 深度优先遍历&#xff1a;先往深走&#xff0c;遇到叶子节点再往回走。 前序遍历&#xff08;递归法&#xff0c;迭代法&#xff09;中序遍历&#…

【LeetCode-中等题】11. 盛最多水的容器

题目 题解一:双指针法 思路&#xff1a; 题目中的示例为&#xff1a; 在初始时&#xff0c;左右指针分别指向数组的左右两端&#xff0c;它们可以容纳的水量为 min⁡(1,7)∗88 此时我们需要移动一个指针。移动哪一个呢&#xff1f;应该移动对应数字较小的那个指针&#xff0…

【机器学习 | 分类指标大全】全面解析分类评估指标:从准确率到AUC,多分类问题也不在话下, 确定不来看看?

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

多维时序 | MATLAB实现SCNGO-BiLSTM-Attention多变量时间序列预测

多维时序 | MATLAB实现SCNGO-BiLSTM-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现SCNGO-BiLSTM-Attention多变量时间序列预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 多维时序 | MATLAB实现SCNGO-BiLSTM-Attention多变量时间序列预测。 模型描…

工作流引擎之Flowable教程(整合SpringBoot)

简介 Flowable是什么&#xff0c;下面是官方文档介绍&#xff1a; Flowable是一个使用Java编写的轻量级业务流程引擎。Flowable流程引擎可用于部署BPMN 2.0流程定义&#xff08;用于定义流程的行业XML标准&#xff09;&#xff0c; 创建这些流程定义的流程实例&#xff0c;进行…

最优化方法Python计算:牛顿算法

设函数 f ( x ) f(\boldsymbol{x}) f(x)&#xff0c; x ∈ R n \boldsymbol{x}\in\text{ℝ}^n x∈Rn二阶连续可微&#xff0c;记 g ( x ) ∇ f ( x ) \boldsymbol{g}(\boldsymbol{x})\nabla f(\boldsymbol{x}) g(x)∇f(x)&#xff0c; H ( x ) ∇ 2 f ( x ) \boldsymbol{H}(\…

Java后端开发面试题——框架篇

Spring框架中的bean是单例的吗&#xff1f;Spring框架中的单例bean是线程安全的吗&#xff1f; singleton : bean在每个Spring IOC容器中只有一个实例。 prototype&#xff1a;一个bean的定义可以有多个实例。 Spring bean并没有可变的状态(比如Service类和DAO类)&#xff0c…

模板函数实现交换_折半查找_友元函数_运算符重载

模板的本质 模板函数实现交换 #include <stdio.h>template<class T> void myswap(T &l, T &r) {T tmp;tmp = r;r = l;l =<

时序预测 | MATLAB实现SA-ELM模拟退火算法优化极限学习机时间序列预测

时序预测 | MATLAB实现SA-ELM模拟退火算法优化极限学习机时间序列预测 目录 时序预测 | MATLAB实现SA-ELM模拟退火算法优化极限学习机时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 MATLAB实现SA-ELM模拟退火算法优化极限学习机时间序列预测 程序设计 完整…

(成功踩坑)electron-builder打包过程中报错

目录 注意&#xff1a;文中的解决方法2&#xff0c;一定全部看完&#xff0c;再进行操作&#xff0c;有坑 背景 报错1&#xff1a; 报错2&#xff1a; 1.原因&#xff1a;网络连接失败 2.解决方法1&#xff1a; 3.解决方法2&#xff1a; 3.1查看缺少什么资源文件 3.2去淘…

css学习4(背景)

1、CSS中&#xff0c;颜色值通常以以下方式定义: 十六进制 - 如&#xff1a;"#ff0000"RGB - 如&#xff1a;"rgb(255,0,0)"颜色名称 - 如&#xff1a;"red" 2、background-image 属性描述了元素的背景图像. 默认情况下&#xff0c;背景图像进…

2023 - java - 强制类型转换和装箱

强制类型转换和装箱&#xff1a; 在 Java 中&#xff0c;(Integer) 和(int) 是两个不同的类型转换操作符&#xff0c;它们的效果是不一样的。 int a (Integer) t.getContent(); 这条语句使用了装箱&#xff08;Boxing&#xff09;操作&#xff0c;将一个整数对象&#xff08;…

视频上传,限制时长,获取视频时长

使用element的upload上传文件时&#xff0c;除了类型和大小&#xff0c;需求需要限制只能长传18秒内的视频&#xff0c;这里通过upload的before-upload&#xff0c;以及创建一个音频元素对象拿到durtaion时长属性来实现。 getVideoTime(file) {return new Promise(async (resol…

JVM的元空间了解吗?

笔者近期在面试的时候被问到了这个问题&#xff0c;元空间也是Java8当时的一大重大革新&#xff0c;之前暑期实习求职的时候有专门看过&#xff0c;但是近期秋招的时候JVM相关的内容确实有点生疏了&#xff0c;故在此进行回顾。 结构 首先&#xff0c;我们应了解JVM的堆结构&a…

Dockerfile制作Web应用系统nginx镜像

目录 1.所需实现的具体内容 2.编写Dockerfile Dockerfile文件内容&#xff1a; 默认网页内容&#xff1a; 3.构建镜像 4.现在我们运行一个容器&#xff0c;查看我们的网页是否可访问 5.现在再将我们的镜像打包并上传到镜像仓库 1.所需实现的具体内容 基于centos基础镜像…