Java日志系统之Slf4j

news2024/11/16 12:31:17

目录

Slf4j

Slf4j的简单使用

Slf4j的日志绑定流程

Slf4j桥接器


Slf4j

Slf4j又称简单日志门面,Slf4j主要是为了给Java日志访问提供一套标准,规范的API框架,其主要意义在于提供接口,具体的实现可以交由其他的日志框架。

Slf4j的简单使用

Slf4j本身也提供一个简单的日志系统,但通常不用。通常slf4j与其他日志框架绑定使用。

Slf4j的出现时间比Log4j与JUL晚,因此它们两个的接口没有根据Slf4j的文档来,因此需要多引入一个适配器来使用。像logback等日志框架出现较晚,根据Slf4j的接口实现,因此直接引入该框架就好。

下面使用JUL来测试Slf4j。引入下列依赖包。

    <dependencies>
        <!--日志门户-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.5.6</version>
        </dependency>

        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-jdk14</artifactId>
            <version>1.5.6</version>
        </dependency>

        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

测试

    public final static Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
    @Test
    public void testJUL() throws Exception {
        logger.error("error");
        logger.info("info");
        logger.debug("debug");
        logger.trace("trace");
    }

Slf4j的日志绑定流程

  • 添加slf4j-api的依赖
  • 使用slf4j的API在项目中进行统一的日志管理
  • 绑定具体的日志实现框架(JUL与Log4j需要引入适配器依赖)
  • slf4j有且仅有一个日志实现框架,如果有多个默认使用第一个

Slf4j桥接器

当项目初始时使用了Log4j日志框架时,后续项目扩展需要换logback日志框架,如果只是单纯的更换依赖,则仍需要修改代码。此时我们就需要使用桥接器来解决这个问题。

首先是初始项目中,我们只用了log4j的日志框架就可以满足使用了

后续中,我们要对项目进行迭代升级,需要使用logback日志框架。如果不添加桥接器依赖的话。如下如图所示

在原始代码中,会有错误提示。找不到类

这时我们就需要引入对应的桥接器依赖

此时迭代过后的项目也不会报错,且使用的日志框架为logback

注意问题

1.jcl-over-slf4j.jar和 slf4j-jcl.jar不能同时部署。前一个jar文件将导致JCL将日志系统的选择委托给SLF4J,后一个jar文件将导致SLF4J将日志系统的选择委托给JCL,从而导致无限循环。

2.log4j-over-slf4j.jar和slf4j-log4j12.jar不能同时出现

3.jul-to-slf4j.jar和slf4j-jdk14.jar不能同时出现

4.所有的桥接都只对Logger日志记录器对象有效,如果程序中调用了内部的配置类或者是Appender,Filter等对象,将无法产生效果。

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

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

相关文章

概念解析 | 心脏电活动和机械活动之间的关系

注1:本文系“概念解析”系列之一,致力于简洁清晰地解释、辨析复杂而专业的概念。本次辨析的概念是:心脏电活动和机械活动之间的关系。 心跳的交响乐:心脏电活动与机械活动之间的关联 一、背景介绍 心脏通过不断跳动将血液输送到我们身体的每一个角落。而这个跳动过程,是…

【Godot】【BUG】4.x NavigationAgent 导航不生效

4.2.beta2 试了半天才发现原来默认只对第一个有导航的 TileMap 的第 1 层 生效&#xff0c;而我设置的导航层不是第一层&#xff0c;然后我新建了一个 TileMap 将导航的瓦片设置到这个 TileMap 上了&#xff0c;如图 这样就解决了问题&#xff0c;不用再修改默认设置的东西了&a…

超详细 | 差分进化算法原理及其实现(Matlab/Python)

差分进化(Differential Evolution&#xff0c;DE)算法是由美国学者Storn和 Price在1995年为求解Chebyshev多项式拟合问题而提出的。算法主要通过基于差分形式的变异操作和基于概率选择的交叉操作进行优化搜索&#xff0c;虽然其操作名称和遗传算法相同&#xff0c;但实现方法有…

英语——词根篇——单词——f

文章目录 31 . factfactdo,make做&#xff0c;作&#xff08;fact也作fac&#xff09; 32.ferferbring&#xff0c;carry带&#xff0c;拿 33 . florflorflower花&#xff08;flow也作flour&#xff09; 34 . flufluflow流 35 . fusfaus pour灌&#xff0c;流&#xff0c;倾泻 …

IOS屏幕旋转监听

1.设计窗口,添加三个按钮 2.添加事件连接 3.按钮点击事件实现 先添加三个IBAction 实现IBAction 使用旋转立刻生效 -(IBAction)btnFixPortrait:(id)sender{//访问应用程序委托成员_app.mask UIInterfaceOrientationMaskPortrait;//设置窗口旋转属性[self setNeedsUpdateOf…

有效管理token,充分发挥ChatGPT的能力

目录 给提供了 Token 的计算工具,来理解一下Token的计算方式,网址如下: 窗口如下: 实际消耗 Token 数量为 59个,换算之后为2.1-2.2的比例,即一个汉字消耗2.12.2个Token, 再测一下英文的Token消耗,包含空格在内,一共52个英文字母,消耗Token 13个,正好对应13个单词,…

Linux中shell外壳,用户权限,文件权限

Linux 权限 1.shell外壳1.1 shell外壳的定义1.2 shell外壳的作用1.3 shell的原理 2.Linux用户权限2.1创建普通用户2.2 用户之间的切换2.3 sudo指令 3.Linux文件权限3.1文件访问者的分类&#xff08;人&#xff09;3.2 文件文件类型和访问权限&#xff08;事物属性&#xff09;3…

1.3 矩阵

一、向量与矩阵 下面是三个向量 u \boldsymbol u u、 v \boldsymbol v v、 w \boldsymbol w w&#xff1a; u [ 1 − 1 0 ] v [ 0 1 − 1 ] w [ 0 0 1 ] \boldsymbol u\begin{bmatrix}\,\,\,\,1\\-1\\\,\,\,\,0\end{bmatrix}\kern 10pt\boldsymbol v\begin{bmatrix}\,\,\,…

洛谷p1618三连击

import java.util.Scanner; //将 1-9 共9个数分成3组&#xff0c;分别组成3个三位数&#xff0c;且使这3个三位数构成A:B:C的比例&#xff0c;试求出所有满足条件的3个三位数。不满足输出“No!!!”。 public class Main {public static void main(String[] args) {Scanner sc …

Linux_Shell运行原理(命令行解释器)

一般我们叫Linux操作系统&#xff0c;狭义上就是指Linux内核&#xff08;kernel&#xff09;&#xff0c;广义上就是Linux内核Linux外壳程序对应的配套程序&#xff0c;这里我们来详细介绍一下这个“外壳程序”。 在我们使用指令时&#xff0c;这个外壳程序会将我们的解释指令并…

从零开始学习 Java:简单易懂的入门指南之网络编程(三十七)

网络编程 1. 网络编程入门1.1 网络编程概述1.2 网络编程三要素1.3 IP地址1.4 InetAddress1.5 端口和协议 2.UDP通信程序2.1 UDP发送数据2.2UDP接收数据2.3UDP通信程序练习2.4UDP三种通讯方式2.5UDP组播实现2.6UDP广播实现 3. TCP通信程序3.1TCP发送数据3.2TCP接收数据3.3TCP程序…

什么是BFC(块级格式化上下文)?如何创建一个BFC?

BFC,即块级格式化上下文(Block Formatting Context),是CSS中的一个概念,用于描述页面中块级元素如何布局、定位和相互影响的一种机制。BFC是一个独立的渲染区域,具有一定的规则来决定其中元素的排布方式。 创建一个BFC主要有以下几种方法: 1:根元素()自动创建BFC:…

IDEA 新版本设置菜单展开

使用了新版本的IDEA 新UI后&#xff0c;常用的file&#xff0c;view&#xff0c;菜单看不见了&#xff0c;不太适应&#xff0c;找了一下&#xff0c;有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上&#xff0c;应用保存就可以了

Muse 2获取实时脑电数据

Muse 2获取实时脑电数据 之前转载了一篇知乎大佬汇总的采集Muse数据的博客&#xff0c;从亚马逊中国刷到了一个Muse 2&#xff0c;看了下不到2000块&#xff0c;于是果断下单。。。 历时一个月终于到了。。。 试用 需外网才能获取冥想音频资源&#xff0c;然后才能采集数据…

[0xGame 2023 公开赛道] week3

9点停止提交&#xff0c;抓紧时间写出来&#xff0c;明天还有别的题。 PWN edit-shellcode-runtime 可以输入shellcode然后执行&#xff0c;但是禁用了\x0f\x05(syscall&#xff0c;箭头处)&#xff0c;这里需要用前边的程序把这个syscall弄出来。我这里最后一个字符输入\x0f…

Node学习笔记之Node简介

一、Node简介 1.1、为什么学习Node(了解) 企业需求 增加自身职业竞争力 进一步理解 Web&#xff0c;并有助于明白后端开发 大前端必备技能 为了更好的学习前端框架 ... ... 1.2、Node是什么 Node.js是基于 Chrome的V8 JavaScript 引擎构建的JavaScript运行环境。 Node.js不是新…

C++特性——inline内联函数

1. 内联函数 1.1 C语言的宏 在C语言中&#xff0c;我们学习了用#define定义的宏函数&#xff0c;例如&#xff1a; #define Add(x, y) ((x) (y)) //两数相加相较于函数&#xff0c;我们知道宏替换具有如下比较明显的优点&#xff1a; 性能优势&#xff1a; 宏在预处理阶段…

数据结构-树的概念结构及存储

&#x1f5e1;CSDN主页&#xff1a;d1ff1cult.&#x1f5e1; &#x1f5e1;代码云仓库&#xff1a;d1ff1cult.&#x1f5e1; &#x1f5e1;文章栏目&#xff1a;数据结构专栏&#x1f5e1; 目录 一、树的基本概念及结构 1树的概念 2树的存储 二、二叉树的概念及结构 1二叉树的概…

FPGA的64点FFT代码及报告,verilog快速傅里叶变换

名称&#xff1a;64点FFT快速傅里叶变换Radix4 软件&#xff1a;Quartus 语言&#xff1a;Verilog 代码功能&#xff1a; 使用verilog实现64-point Pipeline FFT处理器 FPGA代码资源下载网&#xff1a;hdlcode.com 代码下载&#xff1a; 名称&#xff1a;64点FFT快速傅里…

保姆级 Keras 实现 Faster R-CNN 十四 (预测)

保姆级 Keras 实现 Faster R-CNN 十四 一. 预测模型二. TargetLayer三. 预测四. 显示预测结果五. 加载训练好的参数六. 效果展示七. 代码下载 上一篇 文章中我们完成了 Faster R-CNN 训练的功能, 现在到了预测部分了 一. 预测模型 因为在预测的时候并不需标签, 所以 RoiLabel…