工作小记——使用日志框架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按需保留

pytorch中dataloader的num_workers参数 结论速递 在Windows系统中,num_workers参数建议设为0,在Linux系统则不需担心。 1 问题描述 在之前的任务超大图上的节点表征学习中,使用PyG库用于数据加载的DataLoader,ClusterLoader等类时,会涉及到参数num_workers。在不同系统环境试验该参数的设定值时,会出现不同的结果 colab(Linux),设为12 有warning message,提示num_workers参数设置不合理,不影响继续运行 /usr/local/lib/python3.7/di 阅读详情

相关推荐

3D打印切片软件Cura及CuraEngine原理分析

引言         年初开始进入3D打印行业,受命以Cura为基础,研发一款自主的3D打印切片软件。         自主研发要取其长处,补其不足,首先自然是要搞清楚Cura到底做了什么,读Cura的代码是必需的。我一向都觉得比起自己写代码来,读别人的代码是一个漫又而痛苦的过程,读者的思想与写者总有偏差,往往又无法验证自己的猜想是否正确,只叹人脑不是电脑,无法把眼前的代码从头到尾执行一遍...

AiDiShengDeXiaoWu的博客 4420

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

ICC II 时钟树综合(CTS)前奏:从约束定义到NDR规则的全方位设置指南

本文详细介绍了ICC II中时钟树综合(CTS)的前期准备工作,包括约束定义、NDR规则设置和时钟平衡点控制等关键步骤。通过实际案例和代码示例,指导工程师如何优化时钟偏斜、插入延迟和信号质量,确保芯片设计的时序收敛和性能稳定。特别强调了非默认布线规则(NDR)在时钟网络设计中的重要性。

weixin_42530458的博客 212

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

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

一个平凡的程序猿 1400

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6355

ONFI5.0命令字实战指南:从基础操作到高级应用

本文深入解析ONFI5.0协议的核心——命令字,提供从基础操作到高级应用的实战指南。详细拆解了NAND闪存的复位、读状态、数据读取(00-30)、页编程(80-10)和块擦除(60-D0)等关键命令周期,并探讨了多平面操作与缓存操作等高级性能优化技巧,帮助开发者高效、稳定地与NAND芯片进行底层交互。

vscode5coder的博客 462

最常用的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

树莓派34/100 - Pico读取MPU6050加速度和陀螺仪传感器数据

树莓派Pico连接MPU-6050模块(三轴陀螺仪+三轴加速度),读取运动姿态数据。

申龙斌的程序人生 5087

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

农业AI避坑指南:用YOLO11做叶片病害检测时遇到的5个典型问题

本文分享了使用YOLO11模型进行农业叶片病害检测时常见的五个典型问题及解决方案。针对田间多变光照、病害样本不均衡、标注歧义、背景干扰和边缘部署等挑战,提供了包括场景自适应数据增强、解耦训练、软标签与鲁棒损失函数、困难负样本构建以及模型轻量化部署在内的实战经验,旨在帮助开发者提升农业AI项目的落地效果。

ujm56789012的博客 205

excel 利用SUBTOTAL函数计算筛选后数列总和、均值、最大、最小值

表里有三个人,咱们需要筛选出三个人,并分别计算他们的总和值。 先看一下数据范围(A1:B27) 通过筛选找张三。 按照上图所示输入函数,选择9,求和。 然后按照函数输入即可。 就能计算出结果。 筛选项选择王五,就会自动计算王五的总和。 筛选到李四就会自动计算李四的总和。 如果把9改成1,就是自动计算筛选出来的均值结果,如下图所示。 如果改成4就是取筛选项的最大值,选择5就是取最小值。 ...

yuanYW7556的博客 3万+

slf4j 之 ch.qos.logback 源码阅读

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

学海拾遗 3901

Wi-Fi QoS中AIFSN/CWmin/CWmax/TxOP参数是怎样计算的?

802.11e/WMM的EDCA机制通过AIFS、CWmin/CWmax和TxOP三组参数实现业务优先级控制。AIFS决定最短等待时间(AIFS=SIFS+AIFSN×SlotTime),CWmin/CWmax定义退避范围(2^ECW-1),TxOP设置最大占用时长(32µs单位)。默认配置中,语音业务(VO)优先级最高,其AIFSN最小(2)、CW范围最小(3-7)、TxOP适中(1.504ms);视频(VI)次之;普通数据(BE)和后台(BK)优先级最低。调优需根据网络特性调整参数:VoIP可降低AIF

1042484520@qq.com(邮箱) 1744

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

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

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

Devexpress16.2.6破解工具

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

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

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

LogBack小记

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

WJL_MGQS的专栏 1093

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

架构师小秘圈 366

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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、付费专栏及课程。

余额充值