【Logback】如何在项目中快速引入Logback日志?
目录
1、引入相关依赖或者 jar 包
2、使用logback日志
3、引入logback配置文件
4、打印logback内部状态信息
Logback 是 Java 社区中使用最广泛的日志框架之一。它是其前身 Log4j 的替代品。Logback 比所有现有的日志框架速度更快,占用空间更小,而且比其他日志框架提供了更多了功能。
//日志框架出现的历史顺序:log4j --> JUL–> JCL–> slf4j --> logback--> log4j2
1、引入相关依赖或者 jar 包
Logback-classic 模块除了 logback-classic.jar 之外,要求类路径上必须存在 slf4j-api.jar 和 logback-core.jar。//需要多少jar包是官方文档的明确要求,其中slf4j是日志门面,logback是日志门面的一种具体实现
(1)方式一:使用 jar 包方式
为了使用 Logback 日志,需要将以下 jar 添加到类路径中:
For logback 1.3 targeting Java EE (javax.* namespace) //1.3版本-Java EE
logback-core-1.3.13.jar
logback-classic-1.3.13.jar
slf4j-api-2.0.7.jar
For logback 1.4.x targeting Jakarta EE (jakarta.* namespace) //1.4版本-Jakarta EE
logback-core-1.4.13.jar
logback-classic-1.4.13.jar
slf4j-api-2.0.7.jar
logback-*.jar 文件可以从 Maven 中心的 ch.qos.logback groupId 下下载,而 slf4j-api-2.0.7.jar 可以从 org.slf4j groupId 下载。
Java EE 和 Jakarta EE:
2017 年发生了一件重大的事,Oracle 决定将 Java EE 捐赠给 Eclipse 基金会(但 Java 仍然属于 Oracle)。
因为 Oracle 拥有 “Java” 商标权。按照法律要求,Eclipse 基金会需要对 Java EE 进行更名。经过社区的投票选择,Java EE 被更名为 Jakarta EE。
虽然 Oracle 开源了 Java 源代码,但却并未开源所有的文档。同样令人奇怪的是 Eclipse 基金会还不能使用 javax 的命名空间来创建新的 Java 包,但是可以在现有包的下面创建新的类和子类,这就是 jakarta.* namespace 的来源 //感觉挺那个啥啥的
(2)方式二:使用 maven 方式
要在 Maven 项目中使用 logback-classic,只需要在项目的 pom.xml 文件中声明以下依赖项即可。
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.3.8</version>
</dependency>
但是,logback 不是需要三个包吗?怎么只有一个依赖呢?
这是因为,除了 logback-classic.jar 之外,上述声明还会根据 Maven 的传递性规则自动将 slf4j-api.jar 和 logback-core.jar 拉入你的项目中。
引入相关依赖后(方式一和方式二任意选一种),就可以使用 Logback 日志了,你没有看错,就是这么简单,just do it!!!
2、使用logback日志
现在让我们开始尝试使用 logback:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Example {private static final Logger logger= LoggerFactory.getLogger("self4.Example"); //or Example.classpublic static void main(String[] args) {logger.info("Example log from {}", Example.class.getSimpleName());}
}
输出内容://使用 IntelliJ IDEA,JDK:17.0.9 进行项目构建
11:08:39.641 [main] INFO self4.Example -- Example log from Example
至此,logback 框架就被成功引入到项目中了,这确实是一件非常简单的事,对不对?
注意:从版本 1.3.x 开始,logback 需要 Java 9 来构建。但是,它可以在 Java 8 或更高版本上运行。
不知道你有没有发现,上面的示例没有引用到任何的 logback 的类。Example 类中的 Logger 和 LoggerFactor 都是 slf4j 包中的 API。这是因为在大多数情况下,就日志记录而言,你的类只需要引入 slf4j 的类,所以绝大多数的类将使用 slf4j 的API,并且不会注意到 logback 的存在。//这就好比接口和实现类的情况,在java项目中,我们一般引入的是接口类的对象类型而不是其具体实现类的对象类型
Example 应用程序非常简单,并没有配置任何的配置文件,当 logback 没有找到配置文件时就会执行默认配置策略,logback 会向根记录器(Logger)添加一个默认的 ConsoleAppender。//与Springboot 的思想不谋而合
下边,我们就来引入一个 logback 的配置文件,显示的声明一些配置信息。
3、引入logback配置文件
logback 的配置文件名称为 logback.xml,该文件放置在项目的资源根目录(resources)下即可,简单的配置内容如下:
<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT" /></root>
</configuration>
启动 Example 应用程序,输出内容如下:
13:08:14.919 [main] INFO self4.Example - Example log from Example
logback.xml 配置文件的内容是使用 logback 框架非常重要的一部分,这部分的详细内容,将在后续详细介绍。
4、打印logback内部状态信息
Logback 可以使用内置状态系统跟踪其内部状态的信息。可以通过名为 StatusManager 的组件来访问 logback 生命周期内发生的重要事件。
现在,让我们通过调用 StatusPrinter 类的静态 print() 方法来指示 logback 打印其内部状态。
import ch.qos.logback.classic.LoggerContext;
import ch.qos.logback.core.util.StatusPrinter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Example {private static final Logger logger= LoggerFactory.getLogger("self4.Example");//or Example.classpublic static void main(String[] args) {logger.info("Example log from {}", Example.class.getSimpleName());//打印内部状态信息LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();StatusPrinter.print(lc);}
}
输出信息如下所示:
13:14:37.935 [main] INFO self4.Example - Example log from Example
13:14:37,619 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.4.14 #1、日志版本信息
13:14:37,651 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml] #2、寻找logback-test.xml配置文件
13:14:37,652 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/D:/IDEA_WORKSPACE/demo/demo/target/classes/logback.xml] #3、找到logback.xml配置文件
13:14:37,860 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [STDOUT] #4、appender附加器信息
13:14:37,861 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender] #5、附加器类型
13:14:37,877 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property #6、PatternLayoutEncoder类型
13:14:37,930 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to DEBUG #7、日志级别
13:14:37,930 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [STDOUT] to Logger[ROOT] #8、添加附加器
13:14:37,931 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@11e21d0e - End of configuration. #9、结束配置
13:14:37,932 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@1dd02175 - Registering current configuration as safe fallback point
在上面的示例中,指示 logback 通过调用 StatusPrinter.print() 方法来打印其内部状态。 Logback 的内部状态信息对于诊断与 logback 相关的问题非常有用。
以下是在应用程序中启用日志记录所需的三个步骤://框架使用的基本思路
- 配置 logback 环境,可以通过 logback.xml 文件进行配置。
- 获取 Logger 实例,通过调用 org.slf4j.LoggerFactory 类的 getLogger() 方法(传递当前类名或类本身作为参数)来获取 Logger 实例。
- 使用 Logger 实例,通过调用 Logger 的打印方法(即 debug()、info()、warn() 和 error() 方法)来使用此记录器实例。这将在配置的附加程序上生成日志输出。
有关日志框架的其他信息,这篇文章写得也非常不错,可以进行参考。
logback 的官方文档地址,点击这里。
非常不错的 baeldung 教程,点击这里。
至此,全文结束。
相关文章:

【Logback】如何在项目中快速引入Logback日志?
目录 1、引入相关依赖或者 jar 包 2、使用logback日志 3、引入logback配置文件 4、打印logback内部状态信息 Logback 是 Java 社区中使用最广泛的日志框架之一。它是其前身 Log4j 的替代品。Logback 比所有现有的日志框架速度更快,占用空间更小,而且…...

【Linux从青铜到王者】 基础IO
本篇重点:文件描述符,重定向,缓冲区,磁盘结构,文件系统,inode理解文件的增删查改,查找一个文件为什么一定要有路径,动静态库,有的时候为什么找不到库,动态库的…...

C++之类作用域
目录 1、全局作用域 2、类作用域 2.1、设计模式之Pimpl 2.2、单例模式的自动释放 2.2.0、检测内存泄漏的工具valgrind 2.2.1、可以使用友元形式进行设计 2.2.2、内部类加静态数据成员形式 2.2.3、atexit方式进行 2.2.4、pthread_once形式 作用域可以分为类作用域、类名…...

SpringCloud Gateway网关 全局过滤器[AntPathMatcher 某些路径url禁止访问] 实现用户鉴权
前提:先保证Gateway网关项目 和 Nacos注册中心 等可以正常访问和调用,搭建方法可查看博文SpringCloud Gateway网关 项目创建 及 整合Nacos开发_spring gateway如何设置工程名称-CSDN博客 类似的全局鉴权方案,参考如下: SpringClo…...

ELK介绍以及搭建
基础环境 hostnamectl set-hostname els01 hostnamectl set-hostname els02 hostnamectl set-hostname els03 hostnamectl set-hostname kbased -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config systemctl stop firewalld & systemctl disable firewalld# 安…...

Spring中的ApplicationContext.publishEvent
简单理解 其实就是监听处理。比如找工作平台上,雇主 employer 发布自己的雇佣条件,目的是平台中有符合条件的求职者时,及时向雇主推荐。求职者发布简历,当平台发现某个求职者比较符合条件,就触发被动,推荐…...

jackson、gson、fastjson和json-lib四种主流json解析框架对比
一、四种框架的介绍和对比 在Java中,Jackson、Gson、Fastjson和json-lib都是流行的JSON解析框架,它们各自有一些特点和优势。下面是对它们进行简要介绍和对比: 1.1 介绍 1) Jackson: Jackson是由FasterXML开发的一个高性能的J…...

已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法
今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况: 可以看到 userMapper 下有个红色的波浪警告,虽然代码没有任何问题,能正常运行,但是这个红色警告在这里杵着确实让人很窝心。 于是我在网上找了找,最终明白了原因…...

在jar里限制指定的包名才可调用(白名单)。
1. 在jar包中定义一个接口,例如 用于检查传入的hash值是否匹配预设的值。 2. 在调用接口的地方,获取当前应用的hash值。 3. 将当前应用的hash值与预设的值进行比较,如果匹配,则允许调用接口;否则,拒绝调用。…...

python 提取PDF文字
使用pdfplumber,不能提取扫描的pdf和插入的图片。 import pdfplumberfile_path rD:\UserData\admindesktop\官方文档\1903_Mesh-Models-Overview_FINAL.pdf with pdfplumber.open(file_path) as pdf:page pdf.pages[0]print(page.extract_text()) # 所以文字prin…...

电气机械5G智能工厂数字孪生可视化平台,推进电气机械行业数字化转型
电气机械5G智能工厂数字孪生可视化平台,推进电气机械行业数字化转型。随着科技的不断发展,数字化转型已经成为各行各业发展的重要趋势。电气机械行业作为传统制造业的重要组成部分,也面临着数字化转型的挑战和机遇。为了更好地推进电气机械行…...

C# (WebApi)整合 Swagger
SpringBoot-整合Swagger_jboot整合swagger-CSDN博客 C# webapi 也可以整合Swagger webapi运行其实有个自带的HELP页面 但是如果觉得UI不好看,且没办法显示方法注释等不方便的操作,我们也可以整合Swagger 一、使用NuGet控制台安装Swagger 在菜单中选择…...

导入excel某些数值是0
目录 导入excel某些数值是0数据全部都是0原因解决 部分数据是0原因解决 导入excel某些数值是0 数据全部都是0 有一列“工单本月入库重量”全部的数据都是0 原因 展示的时候,展示的字段和内表需要展示的字段不一致,导致显示的是0。 解决 修改展示的字…...

wo-gradient-card是一款采用uniapp实现的透明辉光动画卡片
采用uniapp-vue3实现,透明辉光动画卡片,卡片内容包含标签、标题、副标题、图片 支持H5、微信小程序(其他小程序未测试过,可自行尝试) 可用于参考学习 可到插件市场下载尝试: https://ext.dcloud.net.cn/plu…...

Spark: a little summary
转眼写spark一年半了,从之前写机器学习组件、做olap到后面做图计算,一直都是用的spark,惭愧的是没太看过里面的源码。这篇文章的目的是总结一下Spark里面比较重要的point,重点部分会稍微看一下源代码,因为spark是跟cli…...

018—pandas 生成笛卡尔积排列组合合并多列字符串数据
思路: 本需求需要将给定的几列数据,生成一个排列组合形式的数据列,利用到 Pandas 多层索引生成的笛卡尔积的方法。 二、使用步骤 1.引入库 代码如下(示例): import pandas as pd2.读入数据 代码如下&…...

【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)
文章目录 四、链表理论五、哈希表理论五、栈和队列理论5.1 单调栈 六、二叉树理论6.1 树的定义6.2 二叉树的存储方式6.3 二叉树的遍历方式6.4 高度和深度 最近博主学习了算法与数据结构的一些视频,在这个文章做一些笔记和心得,本篇文章就写了一些基础算法…...

bugku3
前女友 md5 进去又是讴歌乱进的东西 源代码 看到code.txt,访问一下 <?php if(isset($_GET[v1]) && isset($_GET[v2]) && isset($_GET[v3])){$v1 $_GET[v1];$v2 $_GET[v2];$v3 $_GET[v3];if($v1 ! $v2 && md5($v1) md5($v2)){if(!strcmp($v3,…...

相机的白平衡
相机的白平衡是指相机根据拍摄环境的光源色温,调整图像中白色看起来应该是白色的功能。白平衡的设置对于确保图像中的颜色准确性非常重要,因为不同光源的色温会使白色看起来有不同的色调。 通常,相机提供了一些预设的白平衡模式,…...

刷题日记-Day2- Leedcode-977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II-Python实现
刷题日记Day2 977 有序数组的平方209. 长度最小的子数组59. 螺旋矩阵 II 977 有序数组的平方 链接:https://leetcode.cn/problems/squares-of-a-sorted-array/description/ 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组…...

Linux命令-chcon命令(修改对象(文件)的安全上下文)
说明 chcon命令 是修改对象(文件)的安全上下文,比如:用户、角色、类型、安全级别。也就是将每个文件的安全环境变更至指定环境。使用 --reference 选项时,把指定文件的安全环境设置为与参考文件相同。chcon命令位于 /…...

【漏洞复现】大华DSS视频管理系统信息泄露漏洞
Nx01 产品简介 大华DSS数字监控系统是一个在通用安防视频监控系统基础上设计开发的系统,除了具有普通安防视频监控系统的实时监视、云台操作、录像回放、报警处理、设备治理等功能外,更注重用户使用的便利性。 Nx02 漏洞描述 大华DSS视频管理系统存在信…...

websocket了解下
websocket请求长啥样 GET /chat HTTP/1.1 Host: example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ Sec-WebSocket-Version: 13 啥是websocket websocket是http的一种,服务器可以主动向客户端推送信息,…...

docker install private registry 【docker 安装 registry 仅证书认证】
预备条件: 安装docker 我们设定镜像仓库域名为registry01.dev.com 配置/etc/hosts 192.168.23.51 registry01.dev.com安装 registry #!/bin/bashreg_ip$1 reg_n$2 reg_port$3if [ $# -eq 0 ]; thenecho "Usage: $0 [reg_ip] [registry_name]"echo &q…...

JavaWeb——004Maven SpringBootWeb入门
一、Maven 1、什么是maven? 2、Maven的作用是什么?(3种) 1.1、方便的依赖管理 依赖管理:有了Maven,我们就不用再手动导入Jar包了,我们只需要在配置文件当中,简单描述一下项目所需要…...

数据结构与算法-常用排序算法
一、常用排序说明 当涉及排序算法时,理解每个算法的工作原理、时间复杂度和空间复杂度是至关重要的。下面对常用排序算法进行详细说明: 1、冒泡排序(Bubble Sort): 工作原理:比较相邻的元素并交换&am…...

链表之“无头单向非循环链表”
目录 编辑 1.顺序表的问题及思考 2.链表 2.1链表的概念及结构 2.2无头单向非循环链表的实现 1.创建结构体 2.单链表打印 3.动态申请一个节点 3.单链表尾插 4.单链表头插 5.单链表尾删 6.单链表头删 7.单链表查找 8.单链表在pos位置之前插入x 9.单链表删除pos位…...

一休哥助手网页版如何使用
一休哥助手网页版可以使用GPT4提问了,具体操作流程如下: 1.登录网页版一休哥助手(首次打开页面时,初始化久一点,请耐心等一下) https://www.fudai.fun 2.登录后就可以使用GPT4了 3.你还可以自定义系统角色…...

个人博客系统测试
文章目录 一、项目介绍二、测试1. 功能测试2. 自动化测试(1)添加相关依赖(2)新建包并在报下创建测试类(3)亮点及难点 一、项目介绍 个人博客系统采用前后端分离的方法来实现,同时使用了数据库来…...

智慧应急的未来:物联网技术引领智慧应急发展新趋势
一、引言 随着社会的快速发展,各类突发事件频繁发生,对社会的安全稳定构成了严重威胁。传统的应急管理模式已难以满足现代社会对安全保障的需求,急需探索新型的应急管理手段。在这个背景下,智慧应急应运而生,以其高效…...