热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何正确配置与使用日志组件:Log4j、SLF4J及Logback的连接与整合方法

在当前的软件开发实践中,无论是开源项目还是日常工作中,日志框架都是不可或缺的工具之一。本文详细探讨了如何正确配置与使用Log4j、SLF4J及Logback这三个流行的日志组件,并深入解析了它们之间的连接与整合方法,旨在帮助开发者高效地管理和优化日志记录流程。

来源:http://t.cn/EVpprGI

相信目前大多数情况下,不管是开源框架或是平时工作编码中都离不开一种框架,它就是日志框架,本文了解一下我们常用日志框架的区别及如何正确的使用。

1、Commons Logging

common-logging是apache提供的一个通用的日志接口, 在common-logging中,有一个Simple logger的简单实现,但是它功能很弱,所以使用common-logging,通常都是配合着log4j来使用;

Commons Logging定义了一个自己的接口 org.apache.commons.logging.Log,以屏蔽不同日志框架的API差异,这里用到了Adapter Pattern(适配器模式)。

2、SLF4J

Simple Logging Facade for Java(SLF4J)用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署时插入所需的日志框架。

要切换日志框架,只需替换类路径上的slf4j绑定。 例如,要从java.util.logging切换到log4j,只需将slf4j-jdk14-1.8.0-beta2.jar替换为slf4j-log4j12-1.8.0-beta2.jar

SLF4J不依赖于任何特殊的类装载机制。 实际上,每个SLF4J绑定在编译时都是硬连线的,以使用一个且只有一个特定的日志记录框架。 例如,slf4j-log4j12-1.8.0-beta2.jar绑定在编译时绑定以使用log4j。 在您的代码中,除了slf4j-api-1.8.0-beta2.jar之外,您只需将您选择的一个且只有一个绑定放到相应的类路径位置。 不要在类路径上放置多个绑定。

以下是slf4j 绑定其它日志组件的图解说明。

a586b899c9d9077efc09e81730880ca2.png

因此,slf4j 就是众多日志接口的集合,他不负责具体的日志实现,只在编译时负责寻找合适的日志系统进行绑定。具体有哪些接口,全部都定义在slf4j-api中。查看slf4j-api源码就可以发现,里面除了public final class LoggerFactory类之外,都是接口定义。因此,slf4j-api本质就是一个接口定义。

总之,Slf4j更好的兼容了各种具体日志实现的框架,如图:

8ad6b9aa8ee282c08fc8ad8bcd527cac.png

3、Log4j

Apache Log4j是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架。 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器。

2015年8月5日,该项目管理委员会宣布Log4j 1.x已达到使用寿命。 建议用户使用Log4j 1升级到Apache Log4j 2。

4、Log4j2

Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些固有问题。

与Logback一样,Log4j2提供对SLF4J的支持,自动重新加载日志配置,并支持高级过滤选项。 除了这些功能外,它还允许基于lambda表达式对日志语句进行延迟评估,为低延迟系统提供异步记录器,并提供无垃圾模式以避免由垃圾收集器操作引起的任何延迟。

所有这些功能使Log4j2成为这三个日志框架中最先进和最快的。

5、Logback

logback是由log4j创始人设计的又一个开源日志组件,作为流行的log4j项目的后续版本,从而替代log4j。

Logback的体系结构足够通用,以便在不同情况下应用。 目前,logback分为三个模块:logback-core,logback-classic和logback-access。

logback-core:模块为其他两个模块的基础。

logback-classic:模块可以被看做是log4j的改进版本。此外,logback-classic本身实现了SLF4J API,因此可以在logback和其他日志框架(如log4j或java.util.logging(JUL))之间来回切换。

logback-access:模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。

6、总结

我建议直接选择SLF4J而不是Log4j,commons logging,logback或java.util.logging

1、在开源库或内部库中使用SLF4J,将使其独立于任何特定的日志记录实现,这意味着无需为多个库管理多个日志记录配置,您的客户端将会很需要这一点。

2、SLF4J提供了基于占位符的日志记录,通过删除检查(isDebugEnabled(),isInfoEnabled()等)来提高代码的可读性。

3、另外,临时字符串数量越少意味着垃圾收集器的工作量就越少,这意味着应用程序的吞吐量和性能会更好。

这些优势只是冰山一角,当您开始使用SL4J深入了解它时,您将看到更多的优点。 我强烈建议,Java中的任何新代码开发都应该使用SLF4J来记录日志。

63efbf33e577f97db2b0740be4439269.png

分享一份蛮不错的《Java核心知识点整理.pdf》,覆盖了JVM、锁、高并发、反射、Spring原理、微服务、Zookeeper、数据库、数据结构等等。

获取方式:关注公众号并回复 666 领取,更多内容陆续奉上,敬请期待。

 近期热文:

  • JVM发生OOM的 8 种原因、及解决办法

  • 高并发下的 AtomicLong 性能有点差!

  • ZGC,一个超乎想象的垃圾收集器

  • 一致性哈希算法在分布式场景中的应用

  • 最全面的JVM G1学习笔记

  • Redis分布式锁要这样实现才牛逼

a8f63cd04d8bb1448daf973cfc671811.png



推荐阅读
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 并发编程 12—— 任务取消与关闭 之 shutdownNow 的局限性
    Java并发编程实践目录并发编程01——ThreadLocal并发编程02——ConcurrentHashMap并发编程03——阻塞队列和生产者-消费者模式并发编程04——闭锁Co ... [详细]
  • 本文探讨了2019年前端技术的发展趋势,包括工具化、配置化和泛前端化等方面,并提供了详细的学习路线和职业规划建议。 ... [详细]
  • 本文深入探讨了MySQL中常见的面试问题,包括事务隔离级别、存储引擎选择、索引结构及优化等关键知识点。通过详细解析,帮助读者在面对BAT等大厂面试时更加从容。 ... [详细]
  • 云屏系统基于嵌入式微系统msOS,旨在解决当前嵌入式彩屏GUI编程中硬件要求高、软件开发复杂、界面效果不佳等问题。该系统通过结合MCU和Android技术,利用Html5+JavaScript实现高效、易用的图形用户界面开发,使嵌入式开发人员能够专注于业务逻辑。 ... [详细]
  • 本文记录了作者在学习验证码识别过程中,针对粘连字符分割的探索与实践。通过对多种算法的研究和应用,总结出有效的解决方案,并分享了相关经验和技巧。 ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本文详细解析了Java中throw和throws的关键区别,同时涵盖了JDK的定义、Java虚拟机的关键约定、Java的跨平台性、自动垃圾回收机制、源文件结构、包的概念及作用等多个核心知识点,旨在帮助学生更好地准备Java期末考试。 ... [详细]
  • 本文详细介绍了Java的安装、配置、运行流程以及有效的学习方法,旨在帮助初学者快速上手Java编程。 ... [详细]
  • 深入解析BookKeeper的设计与应用场景
    本文介绍了由Yahoo在2009年开发并于2011年开源的BookKeeper技术。BookKeeper是一种高效且可靠的日志流存储解决方案,广泛应用于需要高性能和强数据持久性的场景。 ... [详细]
  • Eclipse 中 JSP 开发环境配置指南
    本文详细介绍了如何在 Eclipse 集成开发环境中配置 JSP 运行环境,包括必要的软件下载、Tomcat 服务器的配置以及常见问题的解决方法。 ... [详细]
  • 前言无论是对于刚入行工作还是已经工作几年的java开发者来说,面试求职始终是你需要直面的一件事情。首先梳理自己的知识体系,针对性准备,会有事半功倍的效果。我们往往会把重点放在技术上 ... [详细]
  • 本文探讨了Web开发与游戏开发之间的主要区别,旨在帮助开发者更好地理解两种开发领域的特性和需求。文章基于作者的实际经验和网络资料整理而成。 ... [详细]
  • 在互联网信息爆炸的时代,当用户需求模糊或难以通过精确查询表达时,推荐系统成为解决信息过载的有效手段。美团作为国内领先的O2O平台,通过深入分析用户行为,运用先进的机器学习技术优化推荐算法,提升用户体验。 ... [详细]
  • 本文探讨了在 SQL Server 中使用 JDBC 插入数据时遇到的问题。通过详细分析代码和数据库配置,提供了解决方案并解释了潜在的原因。 ... [详细]
author-avatar
吃羊的肉
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有