Logback解析和实例


文章目录

  • 1、概念
  • 2、相关依赖
  • 3、基于springboot的日志搭建
    • 3.1、yml或properties 配置
    • 3.2、 logback-spring.xml 详解
      • 3.2.1、appender 解析
        • 3.2.1.1、ConsoleAppender-控制台打印
        • 3.2.1.2、FileAppender-日志输出到文件
        • 3.2.1.3、RollingFileAppender-滚动记录并输出文件
        • 3.2.1.4、file-日志名称和路径
        • 3.2.1.5、rollingPolicy-日志行为
        • 3.2.1.6、encoder-日志格式化
        • 3.2.1.7、filter-过滤器
      • 3.2.2、logger 解析
      • 3.2.3、root 解析
  • 4、logback.xml实例


1、概念


Logback是一个开源日志组件,同时也是 log4j 项目的后续版本,取代了log4j后续的地位。

Logback效率高、适应诸多的运行环境,同时logback 对SLF4J 进行了实现,天然支持 SLF4J。

Logback很灵活,架构通用性强,同时也是 SpringBoot 的内置日志框架。

Logback分为三个模块:logback-core、logback-classic、logback-access。

Logback-core是Logback日志的基础模块。

Logback-classic模块是log4j的改进版本。它本身实现了SLF4J API,所以使用它可以和log4j进行灵活的切换。

logback-access模块集成了Servlet容器,以便实现HTTP访问日志功能。


2、相关依赖


logback所需要的依赖

<dependency>                                                                           <groupId>ch.qos.logback</groupId><artifactId>logback-core</artifactId>
</dependency><dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
</dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId>
</dependency>

springboot兼容logback,默认集成这些依赖。

spring-boot-starter其中包含了 spring-boot-starter-logging,该依赖内容就是 Spring Boot 默认的日志框架Logback+SLF4J。

spring-boot-starter-web 包含了spring-boot-starte。

所以我们只需要引入spring-boot-starter-web就可以了。

我们下面的解析基于springboot实现。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

3、基于springboot的日志搭建


3.1、yml或properties 配置


属性描述
logging.file日志文件名
logging.path日志文件路径,可以是相对路径,也可以是绝对路径
logging.configlogback配置文件的路径
logging.level.包名指定包名下面的日志级别

  • classpath:表示当前服务Resources目录下
  • spring.application.name:表示当前服务名称
  • level.mybatis=debug:表示mybatis包下面打印日志的级别为debug
logging:config: classpath:logback-spring.xmlfile: ${spring.application.name}path: ../logs/level:mybatis: debug

3.2、 logback-spring.xml 详解

logback的配置文件有三个主要的标签:

  • appender
  • logger:设置某一个包或者具体的某一个类的日志打印级别、以及指定appender。它只有一个name属性,level、addtivity是可选属性。
  • root:属于根logger。它其实也是一个logger,只不过已经被默认命名为root。
    level属性设置打印级: TRACE、DEBUG、INFO、WARN、ERROR、ALL、 OFF,默认是DEBUG。
    如果上面的logger没有设置level属性, 则继承root的属性

3.2.1、appender 解析

负责写日志的组件, 用来设置日志的输出位置, 日志文件的生成策略等


3.2.1.1、ConsoleAppender-控制台打印

把日志打印到控制台

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
...
</appender>

3.2.1.2、FileAppender-日志输出到文件

把日志输出到文件

<appender name="LOG_FILE" class="ch.qos.logback.core.FileAppender">
...
</appender>

3.2.1.3、RollingFileAppender-滚动记录并输出文件

滚动记录,同时把日志输出到文件。

支持日志文件按文件大小日期拆分

<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.FileAppender">
...
</appender>

3.2.1.4、file-日志名称和路径

被写入的文件名,可以是相对目录,也可以是绝对目录,如果上级目录不存在会自动创建,没有默认值。

  • ${LOG_PATH}:yml配置文件中的 logging.path
  • ${LOG_FILE}:yml配置文件中的 logging.file
<appender name="LOG_FILE" class="ch.qos.logback.core.rolling.FileAppender">
<file>${LOG_PATH}${LOG_FILE}.log</file>
</appender>

3.2.1.5、rollingPolicy-日志行为

当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。


它的策略一般常用的有两个

  • TimeBasedRollingPolicy:表示每天生成新的文件
  • SizeAndTimeBasedRollingPolicy:表示每天生成和大小生成同时执行

rollingPolicy下面有三个重要的标签

  • fileNamePattern:表示什么周期触发一次生成新的日志文件,也是周期触发后的文件名称。如果它后缀是 .gz 则代表自动压缩
  • maxHistory:表示保存日志的最大单位时间
  • MaxFileSize:表示每个文件的的大小
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 --><fileNamePattern>${LOG_PATH}${LOG_FILE}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!-- 每产生一个日志文件,该日志文件的保存期限为30天 --><maxHistory>7</maxHistory><!-- maxFileSize:这是活动文件的大小,默认值是10MB,也可以自己设置 --><MaxFileSize>10MB</MaxFileSize>
</rollingPolicy>

3.2.1.6、encoder-日志格式化

  • %d{yyyy-MM-dd}:获取现在的日期并格式化
  • %d{HH:mm:ss.SSS}:获取现在的时间并格式化
  • %-5level:输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
  • %c{1.}:表示显示调用者的时候,只显示包名最后一截及方法名,前面的几段只取首字母
  • %L: 表示调用者所在代码的行号
  • %msg:表示需要打印的日志信息
  • %n: 表示系统换行符

颜色编码:

编码加粗编码描述
%black黑色
%red%boldRed红色
%green%boldGreen绿色
%yellow%boldYellow黄色
%blue%boldBlue蓝色
%magenta%boldMagenta洋红色
%cyan%boldCyan青色
%white%boldWhite白色
%gray灰色
%highlight高亮色
<encoder><pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} %green(%-5level) [%blue(%-20.20thread{20})] %cyan(%-36.36logger{36}) : %msg%n</pattern><charset>utf-8</charset>
</encoder>

3.2.1.7、filter-过滤器

使用过滤器可以设置日志的传递。

日志经过各个过滤器进而被抛弃、被打印或者不处理。

  • level:过滤级别。参数有 TRACE、DEBUG、INFO、WARN、 ERROR、ALL 、OFF
  • onMatch:匹配大于这个级别的日志
  • onMismatch:匹配小于于这个级别的日志,可以选的有

onMatch和onMismatch可选参数有:

参数描述
ACCEPT打印
DENY不打印
NEUTRAL交给下一个过滤器处理
<!-- 日志级别过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch>
</filter>

3.2.2、logger 解析

设置某一个包或者具体的某一个类的日志打印级别,以及指定appender。

它有三个属性,必选的name,可选的level、addtivity

  • name:指定受此loger约束的某一个包或者具体的某一个类。
  • level:设置打印级别,参数有 TRACE、DEBUG、INFO、WARN、 ERROR、ALL 、OFF。如果未设置此属性,logger将会继承上级的级别。
  • addtivity:是否向上级logger传递打印信息,默认true。
<logger name="com.atomikos.jdbc" level="OFF">
</logger><logger name="com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver" level="OFF">
</logger>

3.2.3、root 解析

root同样也是logger元素,但是它是根logger。只有一个level属性,它默认命名为root。

  • level:设置打印级别,参数有 TRACE、DEBUG、INFO、WARN、 ERROR、ALL 、OFF。如果未设置此属性,logger将会继承上级的级别,默认为DEBUG。

如果logger没有设置level属性, 会继承root的属性

<root level="INFO"><appender-ref ref="STDOUT"/>
</root>

4、logback.xml实例

yml配置:

logging:config: classpath:logback-spring.xmlfile: ${spring.application.name}path: ../logs/level:mybatis: debug

xml配置:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><springProperty scope="context" name="app_name" source="spring.application.name"/><include resource="org/springframework/boot/logging/logback/defaults.xml"/><include resource="org/springframework/boot/logging/logback/console-appender.xml"/><jmxConfigurator/><!-- 控制台 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- 日志格式 --><encoder><pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} %green(%-5level) [%blue(%-20.20thread{20})] %cyan(%-36.36logger{36}) : %msg%n</pattern><charset>utf-8</charset></encoder><!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息--><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><!-- 只有这个日志权限才能看,sql语句 --><level>DEBUG</level></filter></appender><appender name="LOG_FILE" class="ch.qos.logback.core.rolling.FileAppender"><file>${LOG_PATH}${LOG_FILE}.log</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 --><fileNamePattern>${LOG_PATH}${LOG_FILE}.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern><!-- 每产生一个日志文件,该日志文件的保存期限为30天 --><maxHistory>7</maxHistory><!-- maxFileSize:这是活动文件的大小,默认值是10MB,也可以自己设置 --><MaxFileSize>10MB</MaxFileSize></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} %green(%-5level) [%blue(%-20.20thread{20})] %cyan(%-36.36logger{36}) : %msg%n</pattern><charset>utf-8</charset></encoder></appender><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_PATH}${LOG_FILE}.log.error</file><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 --><fileNamePattern>${LOG_PATH}${LOG_FILE}.%d{yyyy-MM-dd}.%i.log.error.gz</fileNamePattern><!-- 每产生一个日志文件,该日志文件的保存期限为30天 --><maxHistory>15</maxHistory><!-- maxFileSize:这是活动文件的大小,默认值是10MB,也可以自己设置 --><MaxFileSize>10MB</MaxFileSize></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} %green(%-5level) [%blue(%-20.20thread{20})] %cyan(%-36.36logger{36}) : %msg%n</pattern><charset>utf-8</charset></encoder><!-- 日志级别过滤器 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 过滤的级别 --><level>ERROR</level><!-- 匹配时的操作:接收(记录) --><onMatch>ACCEPT</onMatch><!-- 不匹配时的操作:拒绝(不记录) --><onMismatch>DENY</onMismatch></filter></appender><logger name="com.atomikos.jdbc" level="OFF"></logger><logger name="com.netflix.discovery.shared.resolver.aws.ConfigClusterResolver" level="OFF"></logger><root level="INFO"><!--<appender-ref ref="STDOUT"/>--><appender-ref ref="LOG_FILE"/><appender-ref ref="ERROR_FILE"/><appender-ref ref="CONSOLE"/></root>
</configuration>

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

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

相关文章

8.3Java EE——基于XML的AOP实现

使用AOP代理对象的好处 因为Spring AOP中的代理对象由IoC容器自动生成,所以开发者无须过多关注代理对象生成的过程,只需选择连接点、创建切面、定义切点并在XML文件中添加配置信息即可。 Spring提供了一系列配置Spring AOP的XML元素。 配置Spring AOP的XML元素 元素 描述 &l…

FastReport.Net FastReport.Core 2023.2.23 Crack

FastReport.Net & FastReport.Core 2023.2.23适用于 .NET 7、.NET Core、Blazor、ASP.NET、MVC 和 Windows 窗体的全功能报告库。它可用于 Microsoft Visual Studio 2022 和 JetBrains Rider。 利用数据呈现领域专家针对 .NET 7、.NET Core、Blazor、ASP.NET、MVC、Windo…

MtBatis学习笔记之动态SQL

文章目录 if标签where标签trim标签set标签choose when otherwise批量删除批量插入sql标签与include标签 if标签 1、if标签中的test属性是必须的 2、if标签中test属性的值是false或者true 3、如果test是true&#xff0c;则if标签中的sql语句就会拼接&#xff0c;反之&#xff0…

Jenkins从配置到实战(二) - Jenkins如何在多台机器上自动化构建

前言 jenkins除了支持在本机上进行项目构建&#xff0c;还可以将构建任务分发到其他远程服务器上去执行&#xff0c;可以实现在不同平台和架构的机器上来完成项目的自动化构建任务&#xff0c;也能减轻jenkins服务器的压力。本文章就主要介绍下此流程。 准备工作 准备两台机…

Redis—分布式系统

Redis—分布式系统 &#x1f50e;理解分布式&#x1f50e;分布式—应用服务与数据库服务分离引入更多的应用服务节点理解负载均衡 引入更多的数据库服务节点缓存分库分表 微服务 &#x1f50e;常见概念应用(Application) / 系统(System)模块(Module) / 组件(Component)分布式(D…

支持向量机概述

支持向量机在深度学习技术出现之前,使用高斯核的支持向量机在很多分类问题上取得了很好的结果,支持向量机不仅用于分类,还可以用于回归问题。它具有泛化性能好,适合小样本和高维特征的优点。 1. SVM引入 1.1支持向量机分类 支持向量机的基本模型是定义在特征空间上的间隔…

【笔记】markdown易忘速查(对勾/表格/符号/流程图)

https://www.runoob.com/markdown/md-tutorial.html 这里有较系统的免费教程&#xff0c;本篇只是个人的使用备忘录&#xff0c;仅供参考 目录 mark易忘速查目录表格链接符号公式流程/时序/甘特图 mark易忘速查 目录 [toc](目录名称)目录演示 mark易忘速查目录表格链接符号公…

2023年最全OCR技术指南!预训练OCR大模型呼之欲出

OCR是一项科技革新&#xff0c;通过自动化大幅减少人工录入的过程&#xff0c;帮助用户从图像或扫描文档中提取文字&#xff0c;并将这些文字转换为计算机可读格式。这一功能在许多需要进一步处理数据的场景中&#xff0c;如身份验证、费用管理、自动报销、业务办理等都显得尤为…

【Linux】多线程概念理论

目录 1 什么是线程&#xff1f; 2 线程的优点 3 线程的缺点 4 线程异常 5 线程用途 6 Linux线程和进程对比 1 什么是线程&#xff1f; 在一个程序里的一个执行路线就叫做线程&#xff08;thread&#xff09;。更准确的定义是&#xff1a;线程是“一个进程内部的控制序列…

网关与路由器的区别

仅需2分钟&#xff0c;彻底明白网关的工作原理_哔哩哔哩_bilibili网关_百度百科 一、网关的概念 网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连&#xff0c;是复杂的网络互连设备&#xff0c;仅用于两个高层协议不同的网络互连。网关既可以用于广域…

【目标跟踪】1、基础知识

文章目录 一、卡尔曼滤波二、匈牙利匹配 一、卡尔曼滤波 什么是卡尔曼滤波&#xff1f;——状态估计器 卡尔曼滤波用于在包含不确定信息的系统中做出预测&#xff0c;对系统下一步要做什么进行推测&#xff0c;且会结合推测值和观测值来得到修正后的最优值卡尔曼滤波就是利用…

TypeScript基础篇 - Vue-TS-Webpack 环境实战

目录 WebpackVueTS 环境配置 scripts/webpack.config.js src/Hello.tsx src/SfcDemo.vue src/main.tsx src/shims-vue.d.ts package.json WebpackVueTS 环境配置 scripts/webpack.config.js const path require(path) // 安装插件 npm install webpack webpack-cli b…

VS Code 设置大小写转换快捷键

VS Code 设置大小写转换快捷键 前言&#xff1a;VS Code 没有默认的大小写转换快捷键&#xff0c;需要我们自己添加。 一 、打开快捷键设置面板 二、添加快捷键 在搜索框输入 “转换为大写”&#xff0c;如果您的VS Code没有汉化&#xff0c;此处输入“Transform to Uppercase…

SQL中的替换函数replace将字段中的匹配值进行替换

目录 一、更新替换 二、查询替换 一、更新替换 UPDATE 表名 SET 字段名 REPLACE(字段名,匹配值,替换值) WHERE id 1 例&#xff1a;将user表中的address字段中IP1替换为IP2 UPDATE user SET address REPLACE(address,IP1,IP2) 二、查询替换 SELECT *,REPLACE(字段名,…

OSI七层模型和TCP/IP四层模型以及五层模型

OSI七层模型&#xff08;Open System Interconnect&#xff09;即开放系统互连参考模型&#xff0c;是由ISO&#xff08;International Organization for Standardization&#xff09;国际标准化组织提出的&#xff0c;用于计算机或通信系统间互联的标准体系。 从上到下可分为…

【目标跟踪】2、FairMOT | 平衡多目标跟踪中的目标检测和 Re-ID 任务 | IJCV2021

文章目录 一、背景二、方法2.1 Backbone2.2 检测分支2.3 Re-ID 分支2.4 训练 FairMOT2.5 Online Inference 三、效果3.1 数据集3.2 实现细节3.3 消融实验3.4 最终效果 论文&#xff1a;FairMOT: On the Fairness of Detection and Re-Identification in Multiple Object Tracki…

Mybatis单元测试,不使用spring

平时开发过程中需要对mybatis的Mapper类做单元测试&#xff0c;主要是验证语法是否正确&#xff0c;尤其是一些复杂的动态sql&#xff0c;一般项目都集成了spring或springboot&#xff0c;当项比较大时&#xff0c;每次单元测试启动相当慢&#xff0c;可能需要好几分钟&#xf…

[Linux] CentOS7 中 pip3 install 可能出现的 ssl 问题

由于解决问题之后, 才写的博客, 所以没有图片记录. 尽量描述清楚一些 今天写代码的时候, 突然发现 文件里用了#define定义宏之后, coc.nvim的coc-clangd补全就用不了 :checkhealth了一下, 发现nvim忘记支持python3了 尝试pip3 install neovim的时候, 发现会警告然后安装失败.…

linux服务器部署

文章目录 一、基本工具安装1.使用vi命令编辑文件 二、安装1.jdk2.读入数据 总结 一、基本工具安装 1.使用vi命令编辑文件 注:如果vi命令没有&#xff0c;可以使用yum -y install vim或者apt-get install vim命令安装。 Linux操作系统第二讲 二、安装 1.jdk 参考 卸载jdk…

Mybatis-Plus插入数据返回主键两种方式(注解或XML)

废话不多说&#xff0c;直接撸代码: <?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace&qu…