全网最全 Java 日志框架适配方案!还有谁不会

  您有没有遇到过配置日志但无法打印的情况?

  您有没有遇到过logback配置和引导时出现log4j错误的情况?

  按如下方式:

  log4j:WARNNoappenderscouldbefoundforlogger(org.example.App).log4j:WARNPleaseinitializethelog4jsystemproperly.log4j:WARNeehttp://logging.apache.org/log4j/1.2/faq.html#noconfigformoreinfo.

  有没有见过SLF4J这样的错误报告?

  SLF4J:ClasspathcontainsmultipleSLF4Jbindings.SLF4J:基金会文件[jar:文件/C:/Users/jiang/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/SLF4J:Foundbindingin[jar:file:/C:/Users/jiang/.m2/repository/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30!/slf4j/impl/StaticLoggerBinder.class]SLF4J:Seehttp://www.slf4j.org/codes.html#multiple_bindingsforanexplanation.slf4j.org/Actualbindingisoftype复制代码[ch.qos.logback.class.util.ContextSelectorStaticBinder]

  您有没有遇到过DUBBO日志打印错误?

  您有没有遇到过无法打印MybatisSQL日志的情况?

  您有没有遇到过JPA/HibernateSQL日志不能打印?

  您有没有遇到过在复杂项目中,许多框架的内部日志不能打印?

  您有没有遇到Tomcat工程、打印多个日志文件、catalina.out等文件?

  您有没有遇到SpringBoot项目,日志文件有多份打印的问题?

  您有没有遇到任何日志配置问题…

  违反日志框架。

  上述问题,基本上都是由多组日志记录框架共存或配置错误引起的。

  所以,为什么会有共存和冲突呢?

  通常有以下几个原因:

  该项目为各种日志记录框架手动引用包,例如log4j/log4j2/logback/jboss-logging/jcl,等等。

  包管理器的传递依赖(TransitiveDependencies)导致对dubbo的依赖,但dubbo依赖于zkclient,而可zkclient又依赖于log4j,此时如果您的项目中存在和使用了其他日志记录框架,则会产生多组共存。

  同一日志框架同时存在多个版本。

  各种日志框架在JAVA中。

  您需要先简单介绍Java中的各种日志框架,然后再正式讨论冲突和解决:

  日志框架在Java中分为两类,分别是日志抽象/外观和日志实现。

  记录抽象/外观。

  记录抽象/外观,它们不负责具体的日志打印,比如文件输出,日志内容格式配置等等。它们只是对日志进行了抽象,并定义了一套诸如Logger对象、Level对象等统一的日志打印标准。

  两种日志框架slf4j(SimpleLoggingFacadeforJava)和jcl(ApacheCommonsLogging)是JAVA中日志的主流抽象。另外,jboss-logging也主要用于jboss系列软件,例如hibernate等。比如jcl,它已经有很多年没有更新了(上次更新还是14年),现在最推荐使用slf4j。

  建议阅读:Java核心技术的最新指南。

  实现日志。

  主要有以下几种类型的Java日志实现框架:

  log4j-Apache(老版本的日志框架,虽然很多年都没有更新,新版本是log4j2)

  log4j2-Apache(新版本的log4j,目前具有最强的异步IO性能,并且配置简单)

  Logback-QOS(slf4j是该公司的产品)

  jul(java.util.logging)-内置jdk。

  对于程序,可以直接使用日志框架,或者采用日志抽象+日志实现相结合的方案。但是通常使用日志抽象+日志来实现,这样更加灵活,适配更加简单。

  当前的主流方案是slf4j+logback/log4j2,但如果是jboss系列的产品,还是可以使用jboss-logging的,毕竟是亲儿子。在JPA/Hibernate这样的框架中,jboss-logging是内置的。

  一个SpringBoot+Dubbo日志框架冲突的例子。

  例如,由传递依赖所引起的共存冲突是最常见的:

  例如,我有一个“干净的”spring-boot项目,并且只有一个spring-boot-starter依赖,我希望在这个时候集成dubbo,并使用zookeeper作为注册表,在这个时候我的依赖配置为:

  springframework.bootspring-boot-starterorg.apache.dubbodubbo-spring-boot-starter2.7.9org.dubbodubbo-registry-zookeeper2.7.9。

  开始这个spring-boot项目后,会发现红色的错误列表:

  SLF4J:ClasspathcontainsmultipleSLF4Jbindings.SLF4J:基金会文件[jar:文件/C:/Users/jiang/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/SLF4J:Foundbindingin[jar:file:/C:/Users/jiang/.m2/repository/org/slf4j/slf4j-log4j12/1.7.30/slf4j-log4j12-1.7.30!/org/slf4j/impl/StaticLoggerBinder.class]SLF4J:Seehttp://www.slf4j.o

      更多资讯:https://www.iyakj.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值