log4j 和 commons-logging 在 2007 年相继停止了更新,对于得到如此广泛应用的框架来说,这是个让人不安的事实。幸运的是,log4j 的作者 Ceki Gülcü 这几年并没有闲着,而是带给了我们 slf4j 和 logback。尽管名字改变了,也不再有 Apache 的光环笼罩着,但任何一个使用过 log4j 的开发者对 slf4j 的 API 和 logback 的配置方式都不会感到陌生,甚至,你可能会认为这就是新版本的 log4j 。
除了解决 commons-logging 被人诟病已久的 ClassLoader 问题,slf4j 和 logback 还做出了一些细节上的改进。对那些已经受够了 commons-logging 和 log4j 的小毛病折磨的开发者来说,这些改进提供了相当充分的理由让我们来考虑“升级”到 slf4j 和 logback 。
Parameterized Logging
这个是 slf4j 最讨人喜欢的改进了,不必再为了避免性能损失而到处做 if ( logger.isDebugEnabled() ) 这样的检查,也不必为了插入几个变量而把一句话拆成很多段来写,在很大程度上挽救了开发者的审美情趣。
Default Logging Functionality
当无法找到配置文件时,log4j 只会输出几行错误信息,然后就直接罢-工了,而 logback 则能够优雅地切换到内置的缺省配置,输出 Debug 或更高级别的 Log 到 Console 。对于应用程序的开发来说,log 的配置文件很可能不是从默认位置读取的,因此 logback 的处理方式使得开发者更容易诊断应用程序初始化阶段出现的问题。
Variable Substitution
虽然 log4j 也支持这个特性,但查找范围仅限于 Java System Property,而 logback 则像很多其它框架一样,支持载入外部 .properties 文件,所以开发应用程序的时候,可以把运行环境相关的配置集中在一个 .properties 文件中,提供给各个框架解析,不需要再单独为了 logging 进行设置。
slf4j 提供了丰富的 bridge module 与 commons-logging,log4j 和 java.util.logging 进行协作,迁移到 slf4j 的技术风险被降到了最低。最大的决定因素来自于对已有代码进行修改的工作量,尽管 slf4j 提供了一个移植工具来帮助修改源代码,但只能进行一些基本的 Class 替换,转变到 Parameterized Logging 仍然必须通过手工修改源代码。
采用 logback 要考虑的情况稍微复杂一些。目前只有 slf4j 支持 logback,但对于应用程序而言,仍然有大量的第三方的 lib 使用的是 commons-logging API, 为此,slf4j 提供了山寨版的 jcl-over-slf4j.jar 在集成阶段替换 commons-logging.jar (也有对应 log4j 和 java.util.logging 的山寨版),从而将所有的 Logging 都集中交给 slf4j 处理。如果应用程序使用了 Maven 进行依赖管理的话,由于第三方 lib 对于 commons-logging.jar 的依赖具有传递性,对其逐个添加 exclusion 显然是很繁琐的,用釜底抽薪的方法更简单些,相应的零件可以在 JBoss Repository 中找到。最后,还得留意某些应用服务器的陷阱,例如 IBM Websphere Application Server 6.0 内置了 commons-logging 并且会将其暴露给部署的应用程序并且默认的 ClassLoader 策略是 Parent First……
分享到:
相关推荐
赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...
赠送jar包:log4j-slf4j-impl-2.12.1.jar; 赠送原API文档:log4j-slf4j-impl-2.12.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.12.1.pom; ...
赠送jar包:log4j-slf4j-impl-2.17.1.jar; 赠送原API文档:log4j-slf4j-impl-2.17.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.17.1.pom; ...
**SLF4J与Log4j的结合使用** 1. **引入依赖**:首先,你需要在项目中引入SLF4J和Log4j的依赖。对于Maven项目,可以在pom.xml文件中添加如下依赖: ```xml <groupId>org.slf4j <artifactId>slf4j-api <version>...
**slf4j-log4j12**:这是SLF4J的绑定器,用于将SLF4J API与Log4j框架连接起来。slf4j-log4j12-1.7.x版本是SLF4J针对Log4j 1.2版本的绑定器,它使得应用可以使用SLF4J接口,但实际的日志输出通过Log4j进行。这个桥接...
log4j-slf4j-impl-2.11.2.jar
赠送jar包:log4j-slf4j-impl-2.17.1.jar; 赠送原API文档:log4j-slf4j-impl-2.17.1-javadoc.jar; 赠送源代码:log4j-slf4j-impl-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-slf4j-impl-2.17.1.pom; ...
5. **MDC与NDC**:Log4j-SLF4J-Impl支持Mapped Diagnostic Context (MDC) 和Nested Diagnostic Context (NDC),为日志信息添加上下文信息,有助于追踪和诊断问题。 四、集成与使用 集成Log4j-SLF4J-Impl通常涉及...
6. slf4j-log4j12.jar:SLF4J到Log4j的适配器,使得SLF4J的日志请求可以被Log4j处理。 总的来说,"log4j-slf4j+logback1.3.0"的组合提供了一个强大、灵活的日志解决方案,允许开发者使用统一的API进行日志记录,...
通过SLF4J的绑定实现,可以在保持代码与日志实现解耦的同时,享受到Log4j 2的高效和灵活。在实际项目中,正确配置和使用这些库对于优化日志记录,提高问题排查效率,以及维护系统的稳定性都至关重要。
Log4j2 结合 Slf4j 配置使用 Log4j2 是一个功能强大且广泛使用的日志记录工具,它提供了灵活的日志记录机制和高性能的日志记录能力。Slf4j 则是一个简单的日志记录门面,提供了统一的日志记录接口。今天,我们将...
赠送jar包:log4j-to-slf4j-2.12.1.jar; 赠送原API文档:log4j-to-slf4j-2.12.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.12.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.12.1.pom; 包含翻译后...
赠送jar包:log4j-to-slf4j-2.17.1.jar; 赠送原API文档:log4j-to-slf4j-2.17.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.17.1.pom; 包含翻译后...
这个压缩包“log4j_slf4j.jar”包含了SLF4J接口以及与Log4j相关的实现,Log4j是一个广泛使用的日志记录库,提供了丰富的日志处理功能。 SLF4J的主要目标是为不同的日志框架提供一个统一的API,使得开发者可以在不...
赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...
SLF4J提供了一个桥接器(slf4j-log4j12.jar),使得Log4j可以被SLF4J调用。这样做的好处是保持代码的独立性,如果未来需要切换到其他日志框架,只需更换桥接器即可。 **配置** 为了使用这个组合,开发者需要在项目...
日志记录文件,使用log4j,和slf4j。这种联合使用的方式,提供log4j的jar包、log4j-over-slf4j的jar包,slf4j-api的jar包,以及log4j.properties文件。
1. 兼容性强:Slf4j可以与多种日志系统集成,如Log4j、Logback、Java Util Logging等。 2. 灵活性强:Slf4j提供了统一的日志接口,使得用户可以选择不同的日志实现。 3. 高性能:Slf4j可以在高并发情况下提供高性能...
赠送jar包:log4j-to-slf4j-2.17.1.jar; 赠送原API文档:log4j-to-slf4j-2.17.1-javadoc.jar; 赠送源代码:log4j-to-slf4j-2.17.1-sources.jar; 赠送Maven依赖信息文件:log4j-to-slf4j-2.17.1.pom; 包含翻译后...
赠送jar包:log4j-over-slf4j-1.7.33.jar; 赠送原API文档:log4j-over-slf4j-1.7.33-javadoc.jar; 赠送源代码:log4j-over-slf4j-1.7.33-sources.jar; 赠送Maven依赖信息文件:log4j-over-slf4j-1.7.33.pom; ...