当前位置: 首页 > news >正文

【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 类中的 LoggerLoggerFactor 都是 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 相关的问题非常有用。

        以下是在应用程序中启用日志记录所需的三个步骤://框架使用的基本思路

  1. 配置 logback 环境,可以通过 logback.xml 文件进行配置。
  2. 获取 Logger 实例,通过调用 org.slf4j.LoggerFactory 类的 getLogger() 方法(传递当前类名或类本身作为参数)来获取 Logger 实例。
  3. 使用 Logger 实例,通过调用 Logger 的打印方法(即 debug()、info()、warn() 和 error() 方法)来使用此记录器实例。这将在配置的附加程序上生成日志输出。

        有关日志框架的其他信息,这篇文章写得也非常不错,可以进行参考。

        logback 的官方文档地址,点击这里。

        非常不错的 baeldung 教程,点击这里。

        至此,全文结束。

相关文章:

【Logback】如何在项目中快速引入Logback日志?

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

【Linux从青铜到王者】 基础IO

本篇重点&#xff1a;文件描述符&#xff0c;重定向&#xff0c;缓冲区&#xff0c;磁盘结构&#xff0c;文件系统&#xff0c;inode理解文件的增删查改&#xff0c;查找一个文件为什么一定要有路径&#xff0c;动静态库&#xff0c;有的时候为什么找不到库&#xff0c;动态库的…...

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禁止访问] 实现用户鉴权

前提&#xff1a;先保证Gateway网关项目 和 Nacos注册中心 等可以正常访问和调用&#xff0c;搭建方法可查看博文SpringCloud Gateway网关 项目创建 及 整合Nacos开发_spring gateway如何设置工程名称-CSDN博客 类似的全局鉴权方案&#xff0c;参考如下&#xff1a; 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

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

jackson、gson、fastjson和json-lib四种主流json解析框架对比

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

已解决:IDEA中@Autowired自动注入MyBatis Mapper报红警告的几种解决方法

今天在使用 IDEA 使用 MyBatis 的时候遇到了这种情况&#xff1a; 可以看到 userMapper 下有个红色的波浪警告&#xff0c;虽然代码没有任何问题&#xff0c;能正常运行&#xff0c;但是这个红色警告在这里杵着确实让人很窝心。 于是我在网上找了找&#xff0c;最终明白了原因…...

在jar里限制指定的包名才可调用(白名单)。

1. 在jar包中定义一个接口&#xff0c;例如 用于检查传入的hash值是否匹配预设的值。 2. 在调用接口的地方&#xff0c;获取当前应用的hash值。 3. 将当前应用的hash值与预设的值进行比较&#xff0c;如果匹配&#xff0c;则允许调用接口&#xff1b;否则&#xff0c;拒绝调用。…...

python 提取PDF文字

使用pdfplumber&#xff0c;不能提取扫描的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智能工厂数字孪生可视化平台&#xff0c;推进电气机械行业数字化转型。随着科技的不断发展&#xff0c;数字化转型已经成为各行各业发展的重要趋势。电气机械行业作为传统制造业的重要组成部分&#xff0c;也面临着数字化转型的挑战和机遇。为了更好地推进电气机械行…...

C# (WebApi)整合 Swagger

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

导入excel某些数值是0

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

wo-gradient-card是一款采用uniapp实现的透明辉光动画卡片

采用uniapp-vue3实现&#xff0c;透明辉光动画卡片&#xff0c;卡片内容包含标签、标题、副标题、图片 支持H5、微信小程序&#xff08;其他小程序未测试过&#xff0c;可自行尝试&#xff09; 可用于参考学习 可到插件市场下载尝试&#xff1a; https://ext.dcloud.net.cn/plu…...

Spark: a little summary

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

018—pandas 生成笛卡尔积排列组合合并多列字符串数据

思路&#xff1a; 本需求需要将给定的几列数据&#xff0c;生成一个排列组合形式的数据列&#xff0c;利用到 Pandas 多层索引生成的笛卡尔积的方法。 二、使用步骤 1.引入库 代码如下&#xff08;示例&#xff09;&#xff1a; import pandas as pd2.读入数据 代码如下&…...

【算法与数据结构】链表、哈希表、栈和队列、二叉树(笔记二)

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

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,…...

相机的白平衡

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

刷题日记-Day2- Leedcode-977. 有序数组的平方,209. 长度最小的子数组,59. 螺旋矩阵 II-Python实现

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

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

el-switch文字内置

el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

Spring是如何解决Bean的循环依赖:三级缓存机制

1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间‌互相持有对方引用‌,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...

深度学习水论文:mamba+图像增强

&#x1f9c0;当前视觉领域对高效长序列建模需求激增&#xff0c;对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模&#xff0c;以及动态计算优势&#xff0c;在图像质量提升和细节恢复方面有难以替代的作用。 &#x1f9c0;因此短时间内&#xff0c;就有不…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

抽象类和接口(全)

一、抽象类 1.概念&#xff1a;如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象&#xff0c;这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法&#xff0c;包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中&#xff0c;⼀个类如果被 abs…...

TJCTF 2025

还以为是天津的。这个比较容易&#xff0c;虽然绕了点弯&#xff0c;可还是把CP AK了&#xff0c;不过我会的别人也会&#xff0c;还是没啥名次。记录一下吧。 Crypto bacon-bits with open(flag.txt) as f: flag f.read().strip() with open(text.txt) as t: text t.read…...