Java日志体系

JUL

   java自带的一个日志记录的技术(java.util.logging),默认打印info及以上级别

 

JCL

    commons-logging.jar
    本身不记录日志,如果配置了log4j(引入log4j架包),则使用log4j,否则使用JUL

    private static final String[] classesToDiscover = {
            org.apache.commons.logging.impl.Log4JLogger,
            "org.apache.commons.logging.impl.Jdk14Logger",
            "org.apache.commons.logging.impl.Jdk13LumberjackLogger",
            "org.apache.commons.logging.impl.SimpleLog"
    };


slf4j(Simple Logging Facade for Java)

        slf4j本身也不记录日志,通过绑定器绑定一个具体的日志框架来完成日志记录:
            slf4j-log4j12-1.8.0-beta2.jar
            slf4j-jdk14-1.8.0-beta2.jar
            slf4j-nop-1.8.0-beta2.jar
            slf4j-simple-1.8.0-beta2.jar
            slf4j-jcl-1.8.0-beta2.jar
            logback-classic-1.0.13.jar (requires logback-core-1.0.13.jar) 
            
        另外,可以将其他的日志框架桥接到slf4j上:
        jcl-over-slf4j.jar
        log4j-over-slf4j
        jul-to-slf4j       
    

Spring4

    Spring4 当中依赖JCL,采用的日志技术是JCL,引入 commons-logging.jar
    会先判断是否引入了log4j,如果引入了则使用log4j,否则使用JUL


Spring5

    默认使用的是JUL, 引入 spring-jcl.jar
    spring-jcl.jar里面的内容还是commons-logging.jar的内容,只是spring将commons-logging的源码进行了修改
    按Log4j 2.x,SLF4J 1.7 SPI,SLF4J 1.7 API,JUL 的顺序使用
    如果想使用Log4j,可以引入SLF4J,将SLF4J绑定到Log4j
    
    private static LogApi logApi = LogApi.JUL;

    static {
        ClassLoader cl = LogFactory.class.getClassLoader();
        try {
            // Try Log4j 2.x API
            cl.loadClass("org.apache.logging.log4j.spi.ExtendedLogger");
            logApi = LogApi.LOG4J;
        }
        catch (ClassNotFoundException ex1) {
            try {
                // Try SLF4J 1.7 SPI
                cl.loadClass("org.slf4j.spi.LocationAwareLogger");
                logApi = LogApi.SLF4J_LAL;
            }
            catch (ClassNotFoundException ex2) {
                try {
                    // Try SLF4J 1.7 API
                    cl.loadClass("org.slf4j.Logger");
                    logApi = LogApi.SLF4J;
                }
                catch (ClassNotFoundException ex3) {
                    // Keep java.util.logging as default
                }
            }
        }
    }

 

mybatis

 

    mybatis的日志工厂类:org.apache.ibatis.logging.LogFactory会按如下顺序加载日志框架:
    SLF4J、JCL、Log4j 2、Log4j、JUL
    

      public static synchronized void useSlf4jLogging() {
        setImplementation(org.apache.ibatis.logging.slf4j.Slf4jImpl.class);
      }
    
      public static synchronized void useCommonsLogging() {
        setImplementation(org.apache.ibatis.logging.commons.JakartaCommonsLoggingImpl.class);
      }
    
      public static synchronized void useLog4J2Logging() {
        setImplementation(org.apache.ibatis.logging.log4j2.Log4j2Impl.class);
      }
      
      public static synchronized void useLog4JLogging() {
        setImplementation(org.apache.ibatis.logging.log4j.Log4jImpl.class);
      }
    
      public static synchronized void useJdkLogging() {
        setImplementation(org.apache.ibatis.logging.jdk14.Jdk14LoggingImpl.class);
      }
    
      public static synchronized void useNoLogging() {
        setImplementation(org.apache.ibatis.logging.nologging.NoLoggingImpl.class);
      }
      
    
    如果想让Mybatis使用某种日志框架,可以在调用其他mybatis方法之前调用如下方法:
    org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
    org.apache.ibatis.logging.LogFactory.useLog4JLogging();
    org.apache.ibatis.logging.LogFactory.useLog4J2Logging();
    org.apache.ibatis.logging.LogFactory.useJdkLogging();
    org.apache.ibatis.logging.LogFactory.useCommonsLogging();
    org.apache.ibatis.logging.LogFactory.useStdOutLogging();
      
    想让mybatis使用Log4j,引入了log4j的架包:
    如果mybatis和Spring4整合,spring4会引入JCL,JCL判断引入了log4j则使用log4j, LogFactory初始时加载到JCL时,判断存在JCL,会设置为使用JCL,
    所以,无需再明确调用org.apache.ibatis.logging.LogFactory.useLog4JLogging();也可以使用log4j
    但是,如果mybatis和Spring5整合,Spring5不会引入JCL,而是引入spring自身spring-jcl.jar,按Log4j 2.x,SLF4J 1.7 SPI,SLF4J 1.7 API,JUL 的顺序使用,
    需要明确调用org.apache.ibatis.logging.LogFactory.useLog4JLogging();才可以使用log4j,并且调用的地方需要在Spring初始化之前

 

参考资料:https://shimo.im/docs/kKCgwqgQqHYTeQ8J/read   《spring5通用日志框架》

标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值