热门标签 | 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



推荐阅读
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 本文详细介绍了 Flink 和 YARN 的交互机制。YARN 是 Hadoop 生态系统中的资源管理组件,类似于 Spark on YARN 的配置方式。我们将基于官方文档,深入探讨如何在 YARN 上部署和运行 Flink 任务。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 2018年3月31日,CSDN、火星财经联合中关村区块链产业联盟等机构举办的2018区块链技术及应用峰会(BTA)核心分会场圆满举行。多位业内顶尖专家深入探讨了区块链的核心技术原理及其在实际业务中的应用。 ... [详细]
  • 在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ... [详细]
  • 作为一名新手,您可能会在初次尝试使用Eclipse进行Struts开发时遇到一些挑战。本文将为您提供详细的指导和解决方案,帮助您克服常见的配置和操作难题。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
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社区 版权所有