当前位置: 首页 > news >正文

Spring日志引用原理

常见的日志框架有LOG4J、LOG4J2、LOGBACK、JUL等等
日志门面接口:JCL、SLF4j

slf4j绑定器与桥接器大白话总结

绑定器:假如将log4j绑定到slf4j门面,那么通过slf4j实例化的日志对象就是这个绑定的日志
桥接器:假如此时slf4j绑定的是logback日志,log4j桥接到slf4j上,那么之前通过log4j实例的日志对象会被桥接到logback上,即会统一到logback上

1. spring4中日志调用原理

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

spring4中,jcl中选用日志是依靠写死的数组,按数序便利获取日志,所以优先log4j,没有log4j的话则用jul

spring4中如果想使用logback日志,只需要加入log4j到slf4J的桥接器即可

2.spring5日志调用原理

spring5中,对spring的jcl日志接口进行了改良

	private static final String LOG4J_SPI = "org.apache.logging.log4j.spi.ExtendedLogger";

	private static final String LOG4J_SLF4J_PROVIDER = "org.apache.logging.slf4j.SLF4JProvider";

	private static final String SLF4J_SPI = "org.slf4j.spi.LocationAwareLogger";

	private static final String SLF4J_API = "org.slf4j.Logger";

    if (isPresent(LOG4J_SPI)) {
        if (isPresent(LOG4J_SLF4J_PROVIDER) && isPresent(SLF4J_SPI)) {
            //有log4j桥接器和slf4j
            // log4j-to-slf4j bridge -> we'll rather go with the SLF4J SPI;
            // however, we still prefer Log4j over the plain SLF4J API since
            // the latter does not have location awareness support.
            logApi = LogApi.SLF4J_LAL;
        }
        else {
            // Use Log4j 2.x directly, including location awareness support
            logApi = LogApi.LOG4J;
        }
    }
    else if (isPresent(SLF4J_SPI)) {
        // Full SLF4J SPI including location awareness support
        logApi = LogApi.SLF4J_LAL;
    }
    else if (isPresent(SLF4J_API)) {
        // Minimal SLF4J API without location awareness support
        logApi = LogApi.SLF4J;
    }
    else {
        // java.util.logging as default
        logApi = LogApi.JUL;
    }



在这里插入图片描述

3.spring boot中日志原理

在这里插入图片描述


springboot中加了slf4j,logback,logback绑定器,jul桥接器,log4j2桥接器

mybatis中默认优先slf4j
tomcat中优先jul日志

所以项目统一成了logback日志

相关文章:

  • 项目实战 | 基于RK3566开发板实现USB摄像头推流(ffmpeg+nginx)
  • 进程的程序替换
  • 9. SQL中Insert into/Update/Delete的用法
  • 【webGoat】Path traversal
  • 前后端分离的项目——图书管理系统
  • 【C++修炼秘籍】类和对象(一)
  • 【已解决】利用 Java 多线程并发编程处理数据的实践记录
  • Roson的Qt之旅 #125 QNetworkCookie(网络Cookie)
  • SpringMVC入门案例的步骤
  • 【云原生 | 33】Docker快速部署主流编程语言C/C++
  • 集合和数组之间的相互转换
  • AtCoder Beginner Contest 271 C Manga(贪心 set 注意事项)
  • 导入项目后无法识别Controller、RequestMapping注解
  • 漫水填充算法填充图案 (C++)
  • Python-入门-流程控制(八)
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • Akka系列(七):Actor持久化之Akka persistence
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • echarts花样作死的坑
  • eclipse的离线汉化
  • ES6--对象的扩展
  • IDEA常用插件整理
  • JavaScript设计模式之工厂模式
  • Linux gpio口使用方法
  • Linux链接文件
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Unix命令
  • 回顾2016
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 聊聊flink的BlobWriter
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 删除表内多余的重复数据
  • 数据结构java版之冒泡排序及优化
  • kubernetes资源对象--ingress
  • scrapy中间件源码分析及常用中间件大全
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • ​比特币大跌的 2 个原因
  • (13)Hive调优——动态分区导致的小文件问题
  • (8)STL算法之替换
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (python)数据结构---字典
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (二)springcloud实战之config配置中心
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)计算机毕业设计SSM疫情社区管理系统
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net mvc部分视图
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .one4-V-XXXXXXXX勒索病毒数据怎么处理|数据解密恢复
  • .sys文件乱码_python vscode输出乱码