• java日志体系及版本对应关系


    本文参考:https://mp.weixin.qq.com/s/p0E7WZe55fZm5J8nj5amdQ

    Log日志体系

    在日常工作中我们可能看到项目中依赖的跟日志相关的jar包有很多,commons-logging.jarlog4j.jarsl4j-api.jarlogback.jar等等,眼花缭乱。我们要正确的配置,使得jar包相互作用生效之前,就先要理清它们之间的关系。

    背景/发展史

    那就要从Java Log的发展历程开始说起。

    1. log4j(作者Ceki Gülcü)出来时就等到了广泛的应用(注意这里是直接使用),是Java日志事实上的标准,并成为了Apache的项目

    2. Apache要求把log4j并入到JDK,SUN拒绝,并在jdk1.4版本后增加了JULjava.util.logging

    3. 毕竟是JDK自带的,JUL也有很多人用。同时还有其他日志组件,如SimpleLog等。这时如果有人想换成其他日志组件,如log4j换成JUL,因为api完全不同,就需要改动代码。

    4. Apache见此,开发了JCL(Jakarta Commons Logging),即commons-logging-xx.jar。它只提供一套通用的日志接口api,并不提供日志的实现。很好的设计原则嘛,依赖抽象而非实现。这样应用程序可以在运行时选择自己想要的日志实现组件。

    5. 这样看上去也挺美好的,但是log4j的作者觉得JCL不好用,自己开发出slf4j,它跟JCL类似,本身不替供日志具体实现,只对外提供接口或门面。目的就是为了替代JCL。同时,还开发出logback,一个比log4j拥有更高性能的组件,目的是为了替代log4j。

    6. Apache参考了logback,并做了一系列优化,推出了log4j2

    slf4j作为日志门面的话,你如何去配合使用其他日志实现组件,这里说明一下(注意jar包名缺少了版本号,在找版本时也要注意版本之间是否兼容)

      • slf4j + logback
        slf4j-api.jar + logback-classic.jar + logback-core.jar

      • slf4j + log4j
        slf4j-api.jar + slf4j-log4j12.jar + log4j.jar

      • slf4j + jul
        slf4j-api.jar + slf4j-jdk14.jar

      • 也可以只用slf4j无日志实现
        slf4j-api.jar + slf4j-nop.jar

      • SLF4J的适配

        slf4j支持各种适配,无论你现在是用哪种日志组件,你都可以通过slf4j的适配器来使用上slf4j。

        只要你切换到了slf4j,那么再通过slf4j用上实现组件,即上面说的。

    常见问题

    slf4j的日志加载会在程序启动时把日志打出来,所以一定要注意,它会说明加载是否成功,加载了那个日志实现。

    slf4j已经对错误作了说明:

    http://www.slf4j.org/codes.html

    下面讲一下可能经常遇到的问题

    Failed to load class org.slf4j.impl.StaticLoggerBinder

    没找到日志实现,如果你觉得你已经写上了对应的日志实现依赖了,那你要检查一下了,一般来说极有可能是版本不兼容。

    Multiple bindings

    找到多个日志实现,slf4j会找其中一个作为日志实现。

    代码规范

    阿里对此的代码规范:

    【强制】应用中不可直接使用日志系统(Log4j、Logback)中的 API,而应依赖使用日志框架 SLF4J 中的 API,使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    private static final Logger logger = LoggerFactory.getLogger(Abc.class);

  • 相关阅读:
    学习ASP.NET Core(11)-解决跨域问题与程序部署
    学习ASP.NET Core(10)-全局日志与xUnit系统测试
    学习ASP.NET Core(09)-数据塑形与HATEOAS及内容协商
    学习ASP.NET Core(08)-过滤搜索与分页排序
    学习ASP.NET Core(07)-AOP动态代理与日志
    学习ASP.NET Core(06)-Restful与WebAPI
    学习ASP.NET Core(05)-使用Swagger与Jwt认证
    基于NACOS和JAVA反射机制动态更新JAVA静态常量非@Value注解
    DES 加密解密 文件工具类
    springboot-mybatis双数据源配置
  • 原文地址:https://www.cnblogs.com/zscwb/p/14417999.html
Copyright © 2020-2023  润新知