slf4j、log4j、log4j2、logback到底用哪些jar

SLF4J使用教程以及常见问题解决(最新稳定版) 1.简介 官网:https://www.slf4j.org/manual.html (1)简单日记门面(simple logging Facade for Java)SLF4J是为各种loging APIs提供一个简单统一的接口。 (2)slf4j并不是一种具体的日志系统,而是一个用户日志系统的facade。 (3)在部署时,选择不同的日志系统包,即可自动转换到不同的日志系统上。 如:选择JDK自带的日志系统,则只需要将slf4j-api-XXX.jar和slf4j-jdkXXX.jar放置到classpa 阅读详情
前言

SparkStreaming用久了,打算学习一下Flink,就从官网下载了Flink 1.11,打算搞一个客户端,将程序提交在yarn上。因为Flink从1.7之后就不再提供Hadoop的依赖,所以很多依赖就要自己下载,于是各种ClassNotFoundException,其中以log*.class为首的格外猖狂,可能是因为flink和Hadoop的日志实现有点区别,就一直哐哐哐报错,slf4j、log4j、logback各种jar包十几个,百度好久也没搞清各个jar有什么区别,用在何处,就打算自己总结一下。

log发展历史

Long long Ago,和我刚学Java的时候一样,都是用System.out.println来看看程序输出的结果是否符合自己的预期。后来发现这种方式真的有点low,从JDK1.4开始提供java.until.logging,后来大佬发现JUL太难用了,就自己手撸了个log4j,后来log4j发现安全漏洞,加上代码结构问题难以维护,于是从1.2就停止更新log4j,并又重新手撸了个log4j2,后来这个大佬手撸了一个性能更高、功能更全的logback,从此,这个大佬构建了log的世界,也创造了最常见的日志框架:log4j、log4j2、logback。

SLF4J( Simple Logging Facade for Java )

目前已经提及的四个日志框架,如果我们想用来记录日志的话,需要完成它们必要的配置,并且在代码中获取Logger,打印日志。
引入代码如下:

// 使用log4j,需要log4j.jar
import org.apache.log4j.Logger;
Logger logger_log4j = Logger.getLogger(Test.class);
logger_log4j.info("Hello World!");

// 使用log4j2,需要log4j-api.jar、log4j-core.jar
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
Logger logger_log4j2 = LogManager.getLogger(Test.class);
logger_log4j2.info("Hello World!");

// logback,需要logback-classic.jar、logback-core.jar
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
Logger logger_logback = new LoggerContext().getLogger(Test.class);
logger_logback.info("Hello World!");

// java.until.logging,简称jul
import java.util.logging.Logger;
Logger logger_jul = Logger.getLogger("java.Test");

从上面不难看出,使用不同的日志框架,就要引入不同的jar包,使用不同的代码获取Logger。假设一个项目在漫长的升级过程中,想从jul升级到logback,还得需要修改代码。如果100个class中使用了jul,就得修改100个地方,这是多么一个繁琐的工作。于是Apache Commons Logging出现了。
Common-logging提供了一个日志入口,称作"门面日志",即它不负责写日志,而是提供用一个统一的接口,通过jar来决定使用的日志框架,这样就不要再更换框架的时候再修改代码了。后来开发了log4j的大佬在嫌弃Common-logging难用之后又开发了同样功能的slf4j,今天就拿slf4j讲述门面日志。
门面日志和设计模式中的外观模式如出一辙,就是为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用。slf4j就像是菜鸟驿站,本身没有快递服务,但是提供顺丰、中通等快递服务,至于你想用顺丰还是用中通,完全取决于你的想法。

使用slf4j的代码如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Logger logger = LoggerFactory.getLogger(Test.class);
logger.info("Hello World!")

这行代码就像是你拿了个要寄出的东西(logger)在菜鸟驿站里, 思考到底用哪家快递?A minute later…决定用顺丰(logback),就填了顺丰的快递单(放入logback.jar),但是你看微信余额还有10块,还是用中通(log4j)吧,于是你就退了顺丰的单子(移除logback.jar),填了中通的快递单(放入log4j.jar)。
那么slf4j如何决定使用哪个框架日志呢?如slf4j官方图所示:
在这里插入图片描述
这就是slf4j和其他框架的组合,使用slf4j需要首先导入slf4j-api.jar,和log4j配合,你就要导入log4j.jar,以及他们之间的桥接包slf4j-log412.jar。这个官方图美中不足的地方是,没有log4j2的配合方式,和log4j2配合需要导入桥接包log4j-slf4j-impl.jar和log4j2的log4j-api.jar、log4j-core.jar。logback只需要导入logback-classic和logback-core.jar即可,不需要桥接包。

什么是桥接包,为什么logback没有

先让来让我们看看slf4j从LoggerFactory.getLogger()开始,到底干了什么。
流程图如下:
在这里插入图片描述

原理就是就是让ClassLoader从classpath(依赖的jar)中找到StaticLoggerBinder这个类,然后利用他来返回log4j、logback等Logger,然后实现打印日志。
所谓的桥接包,就是实现了StaticLoggerBinder类来连接slf4j和日志框架。因为log4j和log4j2刚开始没有StaticLoggerBinder这个类,为了不改变程序结构,于是写了一个新的包来实现StaticLoggerBinder。而logback出现slf4j之后,所以就在logback中实现了StaticLoggerBinder,所以就不需要桥接包。
StaticLoggerBinder大致实现了本文第一段代码里面的功能,各自的StaticLoggerBinder为slf4j提供各自的Logger,再提供给用户。
log4j和log4j2桥接包及logback结构如图所示,里面都有StaticLoggerBinder类。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

使用总结

“Class path contains multiple SLF4J bindings.”
在使用slf4j的时候会遇到以上的报告信息。我也曾遇到过web服务因为slf4j问题启动失败。究其根本是因为logback-classic、log4j-slf4j-impl、slf4j-log412、slf4j-jdk这些jar不能同时存在。他们都实现了StaticLoggerBinder类而导致冲突,slf4j无法确定到底用哪个日志框架。

结语

这是自己从官网上和自己调试的代码的一些总结,希望对大家了解slf4j及其应用有帮助,若发现其中不足的地方,还望指出,共同进步。共勉!!!
在这里插入图片描述

Spring boot Maven找不到spring-boot-starter-log4j2 JAR包问题,使用slf4j的logback输出日志 一、问题描述把Springboot版本升级了下,运行发现报了这样一个错误:'dependencies.dependency.version' for org.springframework.boot:spring-boot-starter-log4j:jar is missing.报错的提示是spring-boot-starter-log4j这个Jar找不到。 Maven是如下配置:<par... 阅读详情

相关推荐

slf4j jar包

The download jar file contains the following class files or Java source files. META-INF/FILETEST.DSA META-INF/FILETEST.SF META-INF/MANIFEST.MF org.slf4j.ILoggerFactory.class org.slf4j.IMarkerFactory.class org.slf4j.Logger.class org.slf4j.LoggerFactory.class org.slf4j.MDC.class org.slf4j.Marker.class org.slf4j.MarkerFactory.class org.slf4j.helpers.BasicMDCAdapter.class org.slf4j.helpers.BasicMarker.class org.slf4j.helpers.BasicMarkerFactory.class org.slf4j.helpers.MarkerIgnoringBase.class org.slf4j.helpers.MessageFormatter.class org.slf4j.helpers.NOPLogger.class org.slf4j.helpers.NOPMakerAdapter.class org.slf4j.helpers.NamedLoggerBase.class org.slf4j.helpers.SubstituteLoggerFactory.class org.slf4j.helpers.Util.class org.slf4j.impl.CopyOnInheritThreadLocal.class org.slf4j.impl.LogbackMDCAdapter.class org.slf4j.impl.StaticLoggerBinder.class org.slf4j.impl.StaticMDCBinder.class org.slf4j.impl.StaticMarkerBinder.class org.slf4j.spi.LocationAwareLogger.class org.slf4j.spi.LoggerFactoryBinder.class org.slf4j.spi.MDCAdapter.class org.slf4j.spi.MarkerFactoryBinder.class

1. maven入门

maven入门基础,大体了解maven的使用:代码编译、单元测试、代码打包与安装等 <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId>

lucyLee的博客 1808

org.slf4j.LoggerFactory

包含 slf4j-simple-1.7.25-sources ,slf4j-simple-1.7.25 ,slf4j-nop-1.7.25-sources,slf4j-nop-1.7.25,slf4j-api-1.7.25,slf4j-log4j12-1.7.25等

利用jar 配置log4j2 和 slf4j

文章内容: 介绍如何利用jar包而不用maven配置log4j2 和 slf4j(有些同学的课程实验可能有这种要求) 介绍为什么选择log4j2和slf4j 利用jar配置log4j2 和 slf4j 需要下载以下四个包: 在https://logging.apache.org/log4j/2.x/download.html中下载压缩包,在压缩包中选择: log4j-api-2.13.3.jar log4j-core-2.13.3.jar (这两个是log4j2必备的) log4j-slf4j-imp

awake020 985

多标签分类怎么做?(Python)

首先简单介绍下,多标签分类与多分类、多任务学习的关系: 多分类学习(Multi-class):分类器去划分的类别是多个的,但对于每一个样本只能有一个类别,类别间是互斥的。例如:分类器判断这只动物是猫、狗、猪,每个样本只能有一种类别,就是一个三分类任务。常用的做法是OVR、softmax多分类

y1282037271的博客 1359

《LabVIEW ZYNQ实战指南》第6章>>案例解析:基于USB WiFi模块的ZYNQ无线通信部署与Linux RT开发

本文详细解析了如何为ZYNQ开发板部署USB WiFi模块,实现无线通信。通过LabVIEW Linux RT环境,利用封装好的驱动VI,开发者可轻松配置ZYNQ连接无线网络,摆脱网线束缚,实现程序无线部署与远程调试,为工业物联网应用奠定基础。

app77的博客 755

一文讲尽门面日志slf4j和log4j、log4j2、logback依赖jar引用关系

前言之前都是使用SparkStreaming开发,最近打算学习一下Flink,就从官网下载了Flink 1.11,打算搞一个客户端,将程序提交在yarn上。因为Flink从1.7之后就不...

Java笔记虾 1478

【漆学军】MT4进阶到MT5速成之路(2)获取持仓

MT5在持仓获取上,要比MT4复杂些,分两部分,获取持仓和挂单采用了不同的方法。 一、获取持仓中的buy和sell单 int b=0;//获取buy单个数 int s=0;//获取sell单个数 double lot_total_buy=0;//获取持仓中buy单的总手数 double lot_total_sell=0;//获取持仓中sell单的总手数 for(int i=0; i<PositionsTotal(); i++) { ulong ticket=Positi

漆学军的编程笔记 1625

@slf4j log报错_slf4j和logback、log4j、log4j2到底用哪些jar

前言SparkStreaming用久了,打算学习一下Flink,就从官网下载了Flink 1.11,打算搞一个客户端,将程序提交在yarn上。因为Flink从1.7之后就不再提供Hadoop的依赖,所以很多依赖就要自己下载,于是各种ClassNotFoundException,其中以log*.class为首的格外猖狂,可能是因为flink和Hadoop的日志实现有点区别,就一直哐哐哐报错,slf4...

weixin_39880150的博客 511

Oracle EBS和华为MetaERP在会计科目(COA)设计上的观察非常精准。这两种设计确实代表了两种截然不同的系统架构思想,我们可以从设计哲学、优劣对比和演进关系三个方面进行深入分析。

OracleEBS与华为MetaERP的COA设计对比分析 OracleEBS采用弹性域架构,通过固定段数字符串实现多维度核算,强调稳定性和全球统一标准,但修改成本高、扩展性受限。华为MetaERP采用解耦架构,将核算单元、自然科目和核算维度分离,支持动态扩展和灵活调整,更适合业务快速变化的企业。 OracleEBS优势在于强一致性和成熟稳定,劣势是灵活性差;华为MetaERP优势是极致灵活性,劣势是对管理要求高。两者代表了不同时代的企业软件设计理念:OracleEBS适合标准化需求,MetaERP则面向快

金牌架构师 429

【35】软考软件设计师——设计模式代码填空(C++版)满分精讲|第5/6题二选一必考

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第35篇,聚焦下午选做题**第5/6题C++版设计模式代码填空**,与上一篇Java版形成双子配套,单题分值稳定12~15分。全文超4000字深度拆解C++独有核心考点:虚函数/纯虚函数、构造与析构函数规范、继承权限、模板类编程在设计模式中的应用;精讲单例、工厂、策略、观察者、适配器五大高频模式的C++专属代码写法,标注所有填空核心点位、语法陷阱、内存安全规范

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 543

java 日志 log4j、log4j2、slf4j、logback有什么区别?

java日志jar简介

lwq657359703的博客 687

Transformer实战(38)——视觉Transformer (Vision Transformer, ViT)

Transformer 在自然语言处理 (NLP) 领域取得了显著成就,在许多不同的任务中都表现出色。在本节中,我们将探索视觉 Transformer (Vision Transformer, ViT) 模型。正如 NLP 领域创建了多种模型一样,视觉领域也开发了多种模型,每种模型都为计算机视觉提供了新的视角。通过本节,将学习如何使用 ViT 等模型进行计算机视觉任务,了解基于 Transformer 的预训练计算机视觉模型的工作原理,以及如何针对特定任务进行微调。

盼小辉丶的博客 2872

slf4j介绍以及与Log4j、Log4j2、LogBack整合方法

翻了一下百度和官网。这么介绍slf4j。   slf4j 全称 Simple Logging Facade for Java,是日志框架的一种抽象,那么也就是说 slf4j 是不能单独使用的必须要有其他实现日志框架来配合使用,并且如果要启用slf4j框架要导入slf4j-api-xxx.jar 这个包, 这个包是slf4j 实现各种支持的日志框架的包。比如log4j、log4j2、logback...

weixin_30507269的博客 215

coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?

🏆本文收录于《优快云问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 2669

【ROS2】机械臂MoveIt2

navigation2 专注于移动机器人的导航与定位,处理大范围空间的底盘运动;MoveIt2 专注于机械臂的操作规划,处理多关节协同的末端执行器运动。在复合机器人(如,移动机械臂)navigation2 负责移动到目标区域,MoveIt2 负责机械臂抓取。官网:https://moveit.picknik.ai/main/index.html。

郭老二 597

springboot换日志框架后爆SLF4J: Class path contains multiple SLF4J bindings的解决办法

由于springboot-starter-logging的maven配置是springboot自动配置的,不是我们项目的。所以我们看依赖springboot-starter-logging的包springboot starter,双击点进去,就是我们项目的pom文件了。出现这种错误时,项目还能继续运行 ,但是我们会发现log4j.xml的配置并不生效,日志也没有输出到文件里面。如果还是报错冲突,那就说明项目还有其他依赖也引入了日志框架,这时我们就需要一步步排查了。我们可以在pom.xml的。

马不腾的博客 2282

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

日志门面slf4j与常用的日志框架Log4j,Logback和Log4j2

slf4j 是众多日志框架接口的集合(俗称日志门面),它不负责具体的日志实现,只在编译时负责寻找合适的日志框架进行绑定,各日志框架通过扩展jar包中的适配器与slf4j建立适配 SLF4J可以和Log4j、Logback、Log4j2、JUL等日志框架配合使用,这里主要讲一下常用的几种。Apache Log4j 2是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。按出现顺序逐个分析一下。

weixin_42206151的博客 1254

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

slf4j 与jul、log4j1、log4j2、logback的集成

slf4j与jul的集成jar包依赖关系图1.需要的jar包 slf4j-api.jar slf4j-jdk14.jar 对应的maven依赖:<!-- java.util.logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-jdk14</artifactId> <version>1.

jeikerxiao 3505

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

细说 Java 主流日志工具库

在项目开发中,为了跟踪代码的运行情况,常常要使用日志来记录信息。 在 Java 世界,有很多的日志工具库来实现日志功能,避免了我们重复造轮子。 我们先来逐一了解一下主流日志工具。 :notebook: 本文已归档到:「blog」 日志框架 java.util.logging (JUL) JDK1.4 开始,通过 java.util.logging 提供日志功能。 它能满足基本的日志需要,但是功...

weixin_34306446的博客 149

全面搞懂java日志体系(jcl,slf4j;log4j,jul,simplelog,log4j2,logback)之间的关系

全面搞懂java日志体系(JCL,slf4j;log4j,jul,simplelog,log4j2,logback)之间的关系 文章目录全面搞懂java日志体系(JCL,slf4j;log4j,jul,simplelog,log4j2,logback)之间的关系1.java 日志接口(门面)2.jcl3.slf4j 1.java 日志接口(门面) 目前常用的java接口有两种 jcl 和 slf4j 现在使用最多是 slf4j 这里简单介绍一下这两种日志接口的区别 jcl commons-logging

haohao_ding的博客 737

SLF4J介绍以及与LOG4J、LOG4J2、LOGBACK整合方法

可参考:多个文章 https://download.csdn.net/download/baihuashu116/9962571 原文:https://www.cnblogs.com/qiaoyutao/p/11052953.html 翻了一下百度和官网。这么介绍slf4j。   slf4j 全称 Simple Logging Facade for Java,是日志框架的一种抽象,那么也就...

C18298182575的博客 487

Spring Boot配置Slf4j + log4j2

之前在SpringBoot项目中使用的日志是Slf4j + Logback,现在想换成Slf4j + log4j2。但是在网上找了配置方式,,发现怎么都不好使,,最后发现是jar包冲突了,。所以这里贴出来针对的配置方式,具体关于日志的一些讲解说明这里不多说,可以去百度。

weixin_37799575的博客 1429

日志框架介绍

下图的SLF4J和Commons-Logging就是日志门面,只能日志接口,下方的log4j 或者logback负责具体的写日志操作。如果在项目中使用了SLF4J的门面日志,实现日志框架同时引入了log4j和logback框架,系统启动时就会报jar冲突(下图错误),解压执行的jar发现,包里确实同时存在log4j.jar和logback.jar(见下图)日志框架采用门面日志的方式设计,即它不负责写日志,而是。

xujinwei_gingko的专栏 374
上一篇: 灵魂拷问Java泛型,extends你为什么不继承
下一篇: java -jar和 java -cp
叫我阿柒啊
博客等级 码龄9年 2433粉丝 2369原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值