工作小记——使用日志框架logback踩坑指南

slf4j最新jar包下载和jar包 lombok.extern.slf4j.Slf4j注解错误,和最新slfe4j下载,时刻更新。可以在idea和eclipse应用 立即下载

前言

最近遇到日志打印异常的问题,设置好的日志输出级别不生效,在本地直接在代码里写个Main函数测试没问题,上Linux出现日志输出等级不生效,我设置的error等级,却把info日志给输出了。项目使用logback日志输出框架,最后发现原来是日志冲突,项目包含log4j+slf4j的日志框架,故需要将相关jar包排除即可。 提示:以下是本篇文章正文内容

引用

https://www.cnblogs.com/FlyAway2013/p/10691936.html
https://zhuanlan.zhihu.com/p/101104008
https://www.jianshu.com/u/52c6d746bd8e
http://www.slf4j.org/manual.html (slf4j官网)

一、日志的作用

日志文件用来记录系统操作事件,主要用来快速定位问题的根源、追踪程序执行的过程、追踪数据的变化、采集运行环境数据。日志主要分为事件日志和消息日志。
程序上线后,一旦发生异常,首先要弄清楚当时发生了什么错误。进行了什么操作,环境是否受影响,数据产生生命变化,是不是可重复发生等,然后再进一步的确定大致是哪个方面的问题。确定是程序的问题后再去重现、研究、提出解决方案。这时,日志就给我们提供了第一手的资料。
日志内容需包含哪些:打印日志的时间戳、日志是哪个类记录的、日志事件的简要说明、事件生产者唯一标识、日志输出级别。

二、日志框架

为了兼容系统中或者依赖的jar包中其他日志框架,最好的方法是使用桥接将其他日志框架桥接到slf4j上,然后使用具体的日志输出框架。如:log4j桥接到slf4j,然后使用logback日志框架输出日志。
在这里插入图片描述

1. 直接使用各日志系统

1.1 log4j

maven依赖:

<dependency>
   <groupId>log4j</groupId>
   <artifactId>log4j</artifactId>
   <version>1.2.17</version>
</dependency>

配置文件:log4j.properties
代码中使用:

private static final org.apache.log4j.Logger logger = org.apache.log4j.LogManager.getLogger(loggerName.class);

1.2 commons-logging ,jcl

maven依赖:

<dependency>
   <groupId>commons-logging</groupId>
   <artifactId>commons-logging</artifactId>
   <version>1.2</version>
</dependency>

配置文件:commons-logging.properties
代码中使用:

private static final  org.apache.commons.logging.Log LOG = org.apache.commons.logging.LogFactory.getLog(loggerName.class);

1.3 log4j2

maven依赖:

<dependency>
   <groupId>org.apache.logging.log4j</groupId>
   <artifactId>log4j-core</artifactId>
   <version>2.11.2</version>
</dependency>

配置文件: log4j2.xml 或 log4j.xml
代码中使用:

private static final org.apache.logging.log4j.Logger LOGGER = org.apache.logging.log4j.LogManager.getLogger(loggerName.class);

1.4 logback

maven依赖:

<dependency>
   <groupId>ch.qos.logback</groupId>
   <artifactId>logback-classic</artifactId>
   <version>1.2.3</version>
</dependency>

配置文件: logback.xml
代码中使用:只能使用slf4j的api。

private static final org.slf4j.Logger LOGGER = org.slf4j.LoggerFactory.getLogger(loggerName.class);

1.5 jdk-logging,jul

jdk自带,不用引入jar包。
配置文件: logging.properties
代码中使用:

private static final java.util.logging.Logger LOGGER = java.util.logging.LogManager.getLogManager().getLogger(loggerName.class.getName());

2 使用slf4j日志接口框架

2.1 slf4j-api 的NOP实现

NOP, 也就是No Operation,也就是不做任何操作。不需要引入任何其他jar,配置文件也是无。

2.2 slf4j-api 的logback实现

2.3 slf4j-api 的simple实现

maven依赖:

 <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-simple</artifactId>
      <version>1.7.12</version>
</dependency>

slf4j-simple 依赖了 slf4j-api。slf4j-simple 通常把日志直接打印到 控制台。

配置:simplelogger.properties 或者通过D系统参数。

2.4 slf4j-api 的JUL实现

maven依赖:

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

2.5 slf4j-api 的log4j 实现

maven依赖:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.6.1</version>
</dependency>

2.6 slf4j-api 的log4j2 实现

maven依赖:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.8.2</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-slf4j-impl</artifactId>
    <version>2.8.2</version>
</dependency>

log4j-slf4j-impl 依赖了slf4j-api 和 log4j-api, 但是并没有依赖 log4j-core , 因此, 我们需要手动引入 它 。

2.7 slf4j-api 的JCL实现

3 桥接到slf4j

3.1 log4j桥接到slf4j

maven依赖:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.29</version>
</dependency>

3.2 log4j2桥接到slf4j

maven依赖:

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-to-slf4j</artifactId>
    <version>2.11.1</version>
</dependency>

log4j-to-slf4j没有log4j-core,如果用到了,需将其导入。

3.3 JCL桥接到slf4j,commons-logging

maven依赖:

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.25</version>
</dependency>

3.4 JUL桥接到slf4j

maven依赖:

dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
    <version>1.7.25</version>
</dependency>

代码中需要先执行下面的:

static{
       SLF4JBridgeHandler.install();
   }

4 其他框架桥接到slf4j,然后使用某个日志框架

4.1 logback

maven依赖:

<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>1.2.3</version>
</dependency>
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>jcl-over-slf4j</artifactId>
</dependency>
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>jul-to-slf4j</artifactId>
</dependency>
<!-- log4j 桥接包,slf4j官方实现,另有log4j官方实现,二选一即可 log4j-to-slf4j-->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>log4j-over-slf4j</artifactId>
</dependency>

4.2 log4j2

maven依赖:

<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-slf4j-impl</artifactId>
  <version>2.12.1</version>
</dependency>
<dependency>
  <groupId>org.apache.logging.log4j</groupId>
  <artifactId>log4j-core</artifactId>
  <version>2.12.1</version>
</dependency>
<!-- 以下是桥接包,使用了log4j作为底层实现,
     不能再桥接log4j,否则会出现无限递归的情况
     (具体原因请关注后续文章) -->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>jcl-over-slf4j</artifactId>
</dependency><dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>jul-to-slf4j</artifactId>
</dependency>

代码中使用:

private static final org.slf4j.Logger logger = LoggerFactory.getLogger(loggername.class); 
logger.trace("A TRACE Message"); 
logger.debug("A DEBUG Message"); 
logger.info("An INFO Message"); 
logger.warn("A WARN Message"); 
logger.error("An ERROR Message");

注意

桥接到slf4j,使用logback输出时,需要将其他的包排掉,但是记得不要排多了,排的是日志框架,日志接口如log4j-core,log4j-api按需保留

UFSV3.1-RPMB实现与测试 UFS RPMB功能验证与测试指南 本文介绍了UFS(通用闪存存储)中RPMB(重放保护内存块)的功能验证与测试方法。主要内容包括: RPMB基础配置: 在Linux系统中查看RPMB设备节点 读取RPMB单元描述符获取配置信息 配置RPMB区域大小(16MB)和使能状态 RPMB特性验证: 获取单次写最大请求(16KB) 测试未编程认证密钥时的读写操作 验证认证密钥编程过程 测试用例: 包含4个测试用例,验证RPMB在不同状态下的行为 提供了详细的命令行操作和预期结果 本文可作为UFS RPMB功能验证。 阅读详情

相关推荐

【牛股启动线】副图指标使用技术说明,图文案例分享,通达信炒股指标

如上图,在紫色线在黑色虚线上时,在出现紫色柱线时,通常会出现强势拉升的行情​。柱线加长加上紫色线上扬,进场跟随做多抓强势行情,紫色柱线和紫色线同时做多持续则可以继续持股。如上图,副图指标【牛股启动线】,指标信号包括紫色线走势信号和紫色柱线信号,以及底部的四条虚线技术信号​,还有一条绿色的参考线,一条黑色的虚线两天分档线。如上图,参考买点,紫色柱线开始出现时进场买点,在上图标记的位置对应的就是进场买点​。紫色柱线加长+紫色线上扬,多头共振持股,行情继续拉升阶段,持股待涨或顺势​进场做多。

weixin_69760830的博客 1907

logback-classic升级版本1.4.14,编译和打包都报错无法访问ch.qos.logback.classic.pattern.ClassicConverter

可知ClassicConverter.class反编译要求字节码版本为55.0即java11。最近安全要求升级logback-classic升级为1.4.14,原有版本为1.2.12。(反编译.class文件,字节码版本:55.0)将jdk变更为java11,打包和升级成功。

wanghl_的博客 2094

CAPL 中的变量类型详解与应用

CAPL 中的变量类型详解与应用

qq_42268594的博客 1447

用slf4j+logback实现多功能日志解决方案 --- 转

大家都知道,slf4j是原来log4j的作者写的一个新的日志组件,意思是简单日志门面接口,可以跟其他日志组件配合使用,常用的配合是slf4j+logback,无论从功能上还是从性能上都较之log4j有了很大的提升,我想很多用户都已经尝试,并应用到项目中。 对于日志记录,说实话,以前用过log4j,但没有深入研究,用其最简单的功能。有幸在项目中用到了slf4j,来解决一个稍微复杂点的日志记录需求。

一个平凡的程序猿 1400

2、通过mos管构成的逻辑门电路

一、总结 mos管 是构成 逻辑门电路 的最基本单元。 各个逻辑门电路的真值表如下: 二、各种门 1、非门 NOT 2、与门 AND 3、与非门 把上面与门电路 右边的 非门电路 去掉 NAND 4、或门 OR 5、或非门 NOR 把或门右边的非门电路去掉 6、异或门 XOR 两个输入相异为1,相同为0。 7、同或门 XNOR 两个输入相同为1,相异为0。 ...

engineer0的博客 4万+

Python Selenium调用IE11报错全解析:从环境配置到稳定运行

在Web自动化测试领域,Selenium作为主流的跨浏览器测试框架,其核心原理是通过WebDriver协议与不同浏览器的驱动程序进行通信,实现对浏览器行为的模拟与控制。这一技术为软件测试的自动化、回归测试的效率提升提供了重要价值,广泛应用于金融、政务等对遗留系统兼容性要求高的行业场景。然而,当技术栈涉及过时的浏览器如IE11时,环境配置的复杂性显著增加,特别是Python与Selenium的组合常遭遇驱动兼容性、安全设置等挑战。本文聚焦于解决Python Selenium驱动IE11时的典型报错问题,深入剖

weixin_28834765的博客 322

最常用的slf4j+logback日志框架介绍

1 基本介绍 每一个Java程序员都知道日志对于任何一个Java应用程序尤其是服务端程序是至关重要的,而很多程序员也已经熟悉各种不同的日志库,如java.util.logging、Apachelog4j、logback。但如果你还不知道SLF4J(Simple logging facade for Java)的话,那么是时候在你的项目中学习使用SLF4J了。 SLF4J不同于其他日志类库,与其它日志类库有很大的不同。SLF4J(Simple logging Facade for Java)不是一个真正.

Java后端技术栈 9089

STK之Commu模块之三仿真卫星通信链路参数计算

考虑上述衰减的影响,可以得到卫星接收机输入端的载波功 [C] = [PT] +[GT] +[GR] -[L] -[L1] -[L2] (

juanhuokang2681的博客 8267

springboot 版本1.5.4 版本低 logback 升级1.3以上项目启动冲突Exception in thread “main“ java.lang.NoClassDefFoundErro

这时候启动就会报错Exception in thread "main" java.lang.NoClassDefFoundErro。直接pom文件引入logback1.3.7版本。

weixin_42161659的博客 2753

SAP Joule Studio 全景解析

摘要:SAP Joule Studio是SAP Build平台中的低代码/专业级复合工作台,用于构建和管理企业专属的Joule智能体与技能。它支持通过拖拽和声明式编排实现跨系统任务自动化,与SAP及第三方系统集成。核心构件包括Agent(智能体)、Skill(技能)、Action(动作)和Project(项目)。Joule Studio强调企业级落地,与SAP Build Process Automation等工具协同,实现从设计到运行的全生命周期管理。典型应用场景包括供应链补货、财务关账和人力服务台自动化

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 389

《基于FPGA的数字信号处理》专栏的导航与说明

《基于FPGA的数字信号处理》专栏的导航与说明

孤独的单刀 4160

slf4j 之 ch.qos.logback 源码阅读

文章目录前言LoggerFactoryStaticLoggerBinderContextInitializerContextSelectorStaticBinderDefaultContextSelectorLoggerContextLoggerAppenderAttachableImplOutputStreamAppenderLayoutWrappingEncoderPatternLayoutClassOfCallerConverterLoggingEvent总结一下流程。 前言 最近有个项目再写日志的时

学海拾遗 3901

突破Cloudflare 5秒盾:Python爬虫+GPT分析JS混淆,零基础也能爬

传统突破Cloudflare 5秒盾的门槛极高,需要精通JS逆向、浏览器指纹伪造、行为模拟,而本文的“Playwright+GPT”方案,彻底降低了门槛——无需懂逆向、无需手动改指纹、无需写复杂JS代码,只需3步就能突破大部分网站的防护。低门槛:新手1小时内就能上手,无需逆向工程知识;高成功率:覆盖80%+的普通防护网站,15%的中等防护网站;易扩展:适配不同类型网站,可结合代理、打码平台升级为高可用系统。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1163

小记 | 从 0 到 1,看我如何玩弄千万日志于股掌

程序员的工作离不开日志。 日志就像一个笔记本,可以记录程序运行时的一些信息。 通过日志,我们可以做很多事情。 日志的作用 记录系统和接口的使用情况,比如请求日志 记录和分析用户的行为,比如网站访问日志 调试程序,和控制台的作用类似,但是控制台中的内容并不会保存到文件中,而日志可以长期保存。 帮助我们排查和定位错误。比如在系统抛出异常时,将异常信息记录到日志,可以事后复盘。 通过分析日志还能够优化代码逻辑、提升系统性能、稳定性等。 日志虽然有那么多的作用,但如果数量过多,也会让开

努力做最接地气的编程干货分享,感谢关注 1442

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

LogBack小记

日志级别: DEBUG     调试信息提示 INFO         比较重要的信息提示 WARN       可能存在的潜在问题的提示 ERROR     系统发生异常的提示 准备工作: 工程目录: 实验一:在xml中配置,将不同包路径下类的日志信息输出到不同的日志文件中,并只

WJL_MGQS的专栏 1093

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

小记 | 从 0 到 1,看我玩弄千万日志于股掌

程序员的工作离不开日志。日志就像一个笔记本,可以记录程序运行时的一些信息。日志文件通过日志,我们可以做很多事情。日志的作用1. 记录系统和接口的使用情况,比如请求日志2. 记录和分析用户...

架构师小秘圈 366

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

logback简单说明

虽然工作中每天都看日志,但陆陆续续的看了不少logback的资料,依然不是很清晰。写个小记帮自己理理思路。 假设我们在需要打印日子的地方,都是以当前类去得到一个logger对象,然后打印。此时,日志是否会被输出,会被输出到哪里是如何决定的呢? 此时的logger对象,它的各种配置都会继承它的父logger。logger的继承关系是由name属性来控制的。比如,以com.example.Demo类为参数创建的logger,其name属性就是com.example.Demo。name为com.example

wozhu_csdn的博客 362

spring-boot-maven-plugin深度解析:从打包到部署的实战指南

在Java应用交付链路中,打包与部署是绕不开的核心环节。Spring Boot项目通常通过Maven构建,而其默认的打包方式与普通Jar存在本质差异:可执行Jar内嵌了依赖与类加载器,能够独立运行。理解这一原理,是掌握spring-boot-maven-plugin repackage机制的基础。该插件负责将普通Jar重组成包含BOOT-INF目录结构的可执行产物,解决传统java -jar无法识别嵌套依赖的问题,大幅简化部署流程。实际工程中,无论是使用java -jar直接运行、Docker分层镜像构建,

weixin_34087307的博客 314

log4j与logback包冲突原因及解决,不可忽视的Warning

场景 一个简单的spring-boot程序,

u011372108的博客 2万+

Logback日志配置

Logback配置文件解析

sssxlxwbwz的博客 1万+

log4j升级版日志框架logback的使用以及配置详解

一、logback的介绍   Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch。它当前分为下面下个模块:   logback-core:其它两个模块的基础模块   logback-classic:它是...

java_龙 1234

使用Slf4j + Logback 心得

Slf4j + Logback 今天在IDEA中创建了一个Maven项目,自己没事测试一下在maven中使用Slf4j + Logback 注意点(坑): 1. 创建好一个maven项目后,有mian和test目录,可能没有resources目录和target目录。 2. maven项目创建时没有 target 文件目录时,这个在运行项目后正常会自己生成。 使用Slf4j + Logback : ...

weixin_43651188的博客 450

日志:slf4j+logback 的配置与使用

1. 常用日志组件和选择 java开发日志处理是发现和调试bug所 必不可少的,那么现在企业中常用的日志组件有哪些呢,JCL 、 JUL、  SLF4j、Log4j、  Log4j2 、 Logback、 jboss-loggin 等,一般日志是配套出现的,一般是由  一个日志门面 和 一个日志实现 配套使用, 那么 组成以下结构 日志门面 日志实现     JCL     

独孤小标的博客 3万+

Log slf4j+logback配置

一. 简单配置1.添加依赖<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.10</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <art

Heqianqian的博客 1625
上一篇: spring—— applicationContext.xml 头文件
下一篇: java学习——java中的异常
小方童鞋
博客等级 码龄10年 6粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值