log4j和logback的比较

2023-05-16

一、slf4j

slf4j是一系列的日志接口,而log4j logback等则是具体实现了的日志框架

因为是接口,所以在项目中如果你不引用log4j 、logback或者其它日志框架你会发现,控制台的输出是这样的

b775319585d7a46cdf357e3f5e2327db401.jpg

从运行结果可以看到,由于没有给出具体的logger实现,无法在控制台输出日志。也就是说我们在具体开发中,需要绑定一个日志框架,才能正常的使用slf4j。

也就是说, slf4j就好像我们经常使用的JDBC一样,只是一种规则而已。因此单独的slf4j是不能工作的,它必须搭配其他具体的日志实现方案,比如apacheorg.apache.log4j.Logger,jdk自带的java.util.logging.Logger等等

二、log4j和logback的区别

相同点:两个都是受欢迎的日志框架

区别:

  • log4j是apache实现的一个开源日志组件。(Wrapped implementations)
  • logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架。是slf4j的原生实现。(Native implementations)
  • logback是直接实现了slf4j的接口,而log4j不是对slf4j的原生实现,所以slf4j api在调用log4j时需要一个适配层

三、logback相对于log4j的一些优点

1.更快的实现 
Logback的内核重写了,在一些关键执行路径上性能提升10倍以上。而且logback不仅性能提升了,初始化内存加载也更小了。 

2.Logback-classic非常自然实现了SLF4j 
Logback-classic实现了SLF4j。在使用SLF4j中,你都感觉不到logback-classic。而且因为logback-classic非常自然地实现了SLF4J,所以切换到log4j或者其他,非常容易,只需要提供成另一个jar包就OK,根本不需要去动那些通过SLF4JAPI实现的代码。

3.自动重新加载配置文件 
当配置文件修改了,Logback-classic能自动重新加载配置文件。扫描过程快且安全,它并不需要另外创建一个扫描线程。这个技术充分保证了应用程序能跑得很欢在JEE环境里面。

4.SiftingAppender(一个非常多功能的Appender) 
它可以用来分割日志文件根据任何一个给定的运行参数。如,SiftingAppender能够区别日志事件跟进用户的Session,然后每个用户会有一个日志文件。 
5.自动压缩已经打出来的log 
RollingFileAppender在产生新文件的时候,会自动压缩已经打出来的日志文件。压缩是个异步过程,所以甚至对于大的日志文件,在压缩过程中应用不会受任何影响。
6.自动去除旧的日志文件 
通过设置TimeBasedRollingPolicy或者SizeAndTimeBasedFNATP的maxHistory属性,你可以控制已经产生日志文件的最大数量。如果设置maxHistory为12,那那些log文件超过12个月的都会被自动移除。

四、log4j和logback可以一起使用吗?

不可以,会产生冲突。最多只能使用其中一种日志框架

SLF4J-log4j12.jar或logback.jar中都包含组织/ SLF4J / IMPL / StaticLoggerBinder.class。同一个类加载器对于同一个类只会加载一次,所以即使类路径下有多个 StaticLoggerBinder.class,也只有1个会被加载,而且在我们当前的环境下恰好加载的就是的logback的 StaticLoggerBinder
因此,对于slf4j来说,查找到多个 StaticLoggerBinder.class并不会影响它的执行,只是打印出警告信息而已。
五、如何避免类似的冲突?

由于SLF4J-log4j12.jar或logback.jar中都包含组织/ SLF4J / IMPL / StaticLoggerBinder.class,为了不让SLF4J加载时产生歧义,需要移除这两者之一,使SLF4J只与1个明确的日志实现绑定。
记住:始终要保证,在类路径下,只有1个组织/ SLF4J / IMPL / StaticLoggerBinder.class。 

转载于:https://my.oschina.net/u/4116631/blog/3061544

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

log4j和logback的比较 的相关文章

随机推荐

  • Linux下更新curl版本

    一 前景 由于低版本的curl存在一定的漏洞 xff0c 会对我们的服务器安全造成问题 xff0c 所以 xff0c 我们需要将curl由低版本安装到高版本 二 步骤 1 首先检测服务器安装的curl版本 curl version 2 查看
  • Android广播发送机制剖析【android广播系列二】

    上篇博客大致说了说广播的注册机制 xff0c 动态注册和静态注册广播的原理还不一样 xff0c 动态广播最后HashMap中了 xff0c 最后放到mReceiverResolver中 xff0c 以后当ActivityManagerSer
  • 观察者模式--Java设计模式

    观察者模式定义 xff1a 定义了对象之间的一对多的依赖 xff0c 这样一来 xff0c 当一个对象发生改变状态的时候 xff0c 它的所有依赖者都会收到通知并自动更新 参考如下图 xff1a 观察者设计模式也叫发布 订阅模式 也可以称作
  • Android——RuntimePermission介绍

    1 介绍 androidM版本上 xff0c 对permission的管理做了部分改动 xff0c 针对dangerous permission xff0c 不在安装的时候给予权限 xff0c 而是在运行过程中咨询用户是否给予app响应的权
  • Android中launcherMode="singleTask"详解【android源码解析六】

    android中launcherMode有4中属性 xff1a standard 默认 xff0c singleTop xff0c singleTask和 singleInstance xff1b 网上有好多例子讲解这四种关系的 xff1a
  • Android闹钟最终版【android源码闹钟解析】

    我以前写了个复杂闹钟的demo xff0c 参见 Android闹钟 复杂版 大明进化十五 但是里面的bug有一些 xff0c 好多人留言 xff0c 所以我就看看源码 xff0c 找找原因 xff1f 顺便把源码代码整理出来 xff0c
  • Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】

    最近一周在研究rom移植 xff0c 所以就对Smali语言学习了一下 xff0c Smali语言其实就是Davlik的寄存器语言 xff1b Smali语言就是android的应用程序 apk通过apktool反编译出来的都有一个smal
  • android4.0自定义锁屏总结【android锁屏研究一】

    最近搬家了 xff0c 从北京 gt 深圳 xff0c 除了天气有点不同外 xff0c 其他的都差不多 xff0c 工作性质和以前也类似 xff01 纪念一下自己的迁移 题外话 转载请表明出处 xff1a http blog csdn ne
  • Android(6.0、7.0、8.0) popupWindow弹窗位置错乱解决方案

    问题描述 xff1a 项目中做一个底部弹窗选择地址的功能 xff0c 直接用的PopupWindow xff0c 简单方便 xff0c 但是却不慎入坑 要求效果 xff0c 如下图 xff1a 就是这么一个简单的底部弹窗 xff0c 点击家
  • android系统锁屏详解【android锁屏解析二】

    谷歌的代码写的确实不错 xff0c 我很幸运 xff0c 一开始接触代码就赶上了谷歌这个开源的系统 xff0c 让我的视野开阔了很多 xff0c 也让我看到了优秀的代码工程师写到的代码 心怀感恩之心 题记 我的有篇文章说了这个锁屏 xff0
  • <转载>创建第一个Android项目

    Android 如何创建项目 Android Hai的博客 CSDN博客 android新建项目 目录一 创建流程二 Android Studio 主窗口三 链接一 创建流程1 安装最新版 Android Studio 2 第一次打开And
  • kotlin---使用注释处理的 Android 框架

    在日常 Android 开发中 xff0c 流行着数以千计的框架帮助我们提升开发效率 使用 Kotlin 开发时仍然可以沿用这些框架 xff0c 而且和使用 Java 同样简单 本章教程将提供相关示例并重点介绍配置的差异 教程以 Dagge
  • 集合的使用——超市购物小票案例

    集合的使用 超市购物小票案例 1 定义GoodsItem类 名称 货号 单价 数量 计价单位 金额 span class token comment 定义GoodsItem类 名称 货号 单价 数量 计价单位 金额 span span cl
  • 在Eclipse中添加sun.misc.Launcher类

    研究类加载器 xff0c 用到sun misc Launcher类 xff0c 如何在Eclipse中添加呢 xff1f 启动类加载器的加载路径 URL ruls 61 sun misc Launcher getBootstrapClass
  • IllegalMonitorStateException异常 | 生产者消费者模式

    文章目录 结论先行 xff1a 生产者消费者 synchronized版生产者消费者 Lock版 结论先行 xff1a 这是JDK对这异常的定义 就是说线程没有拿到对应对象的监视器 xff0c 也就不能在监视器上完成wait或者notify
  • Warning Stopping docker.service, but it can still be activated by docker.socket

    执行 systemctl stop docker 后提示 Warning Stopping docker service but it can still be activated by docker socket 解释 xff1a 这是d
  • docker desktop stopping 问题解决

    搜了下网上一些解决问题好像比较多的是docker desktop stopped xff0c 他们是说换低版本的docker desktop解决的 xff0c 但是我的是通过更新WSL xff08 Windows Subsystem for
  • Hadoop启动

    博主用的是Cent0S XShell7使用Hadoop 1 启动Hadoop start all sh 这里会给你报出不赞同的问题 xff0c 但是也是可以使用的 xff0c 最好是采用分别运行HDFS YARN的方式来启动Hadoop 2
  • IDEA2020启动Tomcat控制台中文乱码解决

    IDEA2020启动Tomcat控制台中文乱码解决 1 中文乱码原因 基本上大家安装的windows系统本地语言都是选择中文 xff08 不会有人选择英文吧 xff1f 不会吧 xff1f 不会吧 xff1f xff09 xff0c 也就是
  • log4j和logback的比较

    一 slf4j slf4j是一系列的日志接口 xff0c 而log4j logback等则是具体实现了的日志框架 因为是接口 xff0c 所以在项目中如果你不引用log4j logback或者其它日志框架你会发现 xff0c 控制台的输出是