蚂蚁金服研发框架日志隔离解析 | SOFABoot 框架剖析

领域驱动设计实践:以DDD视角看SOFA 一、前言 最近在蚂蚁接触了一段时间的SOFA,决定写一篇文章记录下学习心得。DDD是2004年被提出的,那时的程序还仅仅是部署单机。到了2014年,SOA大行其道,微服务的概念开始冒头,而如何将一个应用合理的拆分为多个微服务成为了各大论坛的热门话题而DDD里面的Bounded Context(限界上下文)的思想为微服务拆分提供了一套合理的框架。 二、概念 1. 领域+驱动+设计 在《领域驱动设计》一书中,作者 Eric Evans 讲过:在项目的最初阶段,需要业务,产品和技术同时参与进来。尽可能用建模语言把 阅读详情

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。

本文为《剖析 | SOFABoot 框架》第二篇,本篇作者盲僧,来自遨游酒店信息技术。《剖析 | SOFABoot 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号:<SOFA:BootLab/>,文章尾部有参与方式,欢迎同样对源码热情的你加入。

SOFABoot 是蚂蚁金服开源的基于 SpringBoot 的研发框架,提供了诸如 Readiness Check、类隔离、日志空间隔离等能力,用于快速、敏捷地开发 Spring 应用程序,特别适合构建微服务系统。

本文将从 Java 的日志体系谈起,对 JCL、SLF4J 两个经典的日志框架做一个阐述,引出 SOFABoot 开源的日志隔离框架 sofa-common-tools ,并且有实战 Demo,能够帮助我们快速上手和了解这款框架的使用和作用,最后从源码角度对其进行分析,不仅知其然,还要知其所以然。

SOFABoot :https://github.com/sofastack/sofa-boot

sofa-common-tools :https://github.com/sofastack/sofa-common-tools

1

Java 日志问题

业务开发对日志的选择

众所周知,Java 的日志体系非常复杂,有 Log4j、Log4j2、Logback、JUL 等实现,这么多的日志实现让开发人员在选择上不得不犯晕,因为每个日志实现都对外提供了不同的 API,而且还要担心与项目中现有的第三方框架依赖的日志实现产生冲突问题,甚至还要去维护第三方框架带来的日志依赖。在这些问题的基础上,Java 日志框架应运而生,典型的有 JCL 和 SLF4J。

JCL

JCL 即 Apache Commons Logging,它的原理是提供了一套接口,用户使用了它的接口进行编程,具体实现交由它的 LogFactoryImpl 去动态查找,  但是它并不能绑定所有的日志实现,因为查找绑定的日志实现是放在 classesToDiscover  数组里写死的,导致扩展起来比较麻烦,当前最新版本是 1.2 版本,还不支持绑定 Log4j2 和 Logback。

SLF4J

于是乎,大名鼎鼎的 SLF4J 出现了,它的存在就是为了替换 JCL,所以肯定提供了比 JCL 更强大的功能。同样是面向接口编程的设计,但是 SLF4J 充分考虑到了后期的扩展问题:一旦市面上有新的日志实现,那么只需要提供新的绑定包即可,相对于 JCL 的动态绑定,SLF4J 实际上是静态绑定,因为应用程序具体要选用哪种日志组件是由开发人员使用哪个绑定包决定的。绑定原理请看下图:

除此之外,SLF4J 还提供了桥接包,它的意思是指可以把使用某个具体 Log 组件的 API 重定向到 SLF4J 的 API 里(前提需要排除具体实现包,然后引入桥接包),然后 SLF4J 会根据具体的绑定包输出内容,从而达到多种日志实现统一输出的目的。绑定原理请看下图:

中间件对日志的选择

上面解决了业务开发人员的问题,那么对于从事中间件的开发者来说呢?日志依旧是一个痛点。参考一些中间件项目,如 zookeeper 使用的是 log4j ,hibernate-validator 使用的是 jboss-logging,当业务开发人员去集成这些第三方组件时,就会感到头疼,因为这些组件的日志实现很有可能会和当前业务自身的日志依赖产生冲突。常用的解决方法就是排除某一种日志实现依赖,然后修改 appender 和 logger 达到日志隔离。但这并不是一个一劳永逸的方法,因为每次引入新的 jar 包,你都需要考虑是否有日志冲突。

那么市面上是否有成熟的框架来解决这个问题呢?当然是有的,蚂蚁金服开源的 SOFABoot 就提供了这样的功能,底层主要是通过 sofa-common-tools 实现的。那么 sofa-common-tools  又是个啥呢?借用官网的描述:sofa-common-tools  是 SOFAStack 中间件依赖的一个通用工具包,通过自动感知应用的日志实现,提供中间件与应用隔离的日志空间打印能力。

本篇将通过一个案例 demo 先来直观的体验下 sofa-common-tools 所能解决的问题,然后再在此基础上,通过源码解析了解其内部的具体实现原理,以帮助大家更好的认识和了解 sofa-common-tools 这个“小而美”的日志工具包。

2

日志隔离实战

完整项目已经上传到 https://github.com/masteryourself/study-sofa.git ,工程是 study-sofa-common-tools。

有这样一个场景:公司的中间件团队做了一款 middleware-apm  监控系统,并且通过以输出日志的方式向监控系统提供基础数据。由于公司并没有制定统一的日志规范,各个业务方所使用的日志也是千差万别;如:如订单系统使用的是 log4j,账务系统用的 Logback,用户中心用的是 Log4j2;如果期望 apm 提供的日志输出和业务的不冲突,可以独立的并且完整的兼容业务日志的不同实现,此时便可以使用 SOFABoot 提供的日志隔离框架;其可以帮助我们解决日志实现冲突、日志文件隔离以及动态调试日志级别等功能。下面就先来看下 apm  是如何使用 sofa-commons-tools 来实现的。

middleware-apm 项目

新建 middleware-apm 工程,然后执行 mvn clean install 命令,安装到本地仓库。具体代码可以参考middleware-apm ,下面对一些核心代码进行简单的说明和分析。代码结构如下:

middleware-apm:https://github.com/masteryourself/study-sofa/tree/master/study-sofa-common-tools/middleware-apm

日志资源文件配置

这里主要是在 pers.masteryourself.study.sofa.apm.log 目录下创建 log4j、log4j2、logback 的配置文件。

详情请参考:https://github.com/masteryourself/study-sofa/tree/master/study-sofa-common-tools/middleware-apm/src/main/resources/pers/masteryourself/study/sofa/apm/log

核心日志工厂类-ApmLoggerFactory

ApmLoggerFactory 主要是对外提供获取 Logger 实例的 API 方法,其作用类似于 slf4j 中的 LoggerFactory 类;对于想使用 SOFABoot 日志特性的类,只要使用它调用 getLogger 方法获得的 Logger 实例即可。

LoggerFactory 和 ApmLoggerFactory 的最本质区别在于 ApmLoggerFactory 引入了 LOG_SPACE 的概念。

监控工具类-Metrics

模拟 APM 对外提供的一个工具类,提供了一个 metrics 埋点的 API ,其内部主要是通过 ApmMetrics 类进行埋点。

监控核心类-ApmMetrics

ApmMetrics 模拟 APM 监控的一些数据指标、异常信息,如果出错了就调用 error 方法记录异常,最后调用 end 方法提交,这里提交任务只是简单的打印输出。

此项目主要是对外提供入口方法用于监控程序的运行情况,项目的日志会单独记录到一个文件夹中,与业务方日志分开打印,具体效果请配合 user-center 项目一起使用。

user-center 项目

此工程是 SpringBoot 工程,主要是引入 middleware-apm 的 jar 包和 SpringBoot 相关的包。

具体代码可以参考:https://github.com/masteryourself/study-sofa/tree/master/study-sofa-common-tools/user-center

下面列举一些核心代码。代码结构如下:

资源文件配置

  • application.properites

  • log4j2.xml

log 配置请参考:https://github.com/masteryourself/study-sofa/tree/master/study-sofa-common-tools/user-center/src/main/resources

业务类-UserService

模拟一段业务程序的运行,如果运行时间超过 500ms 表示程序超时,抛出异常。

测试用例-UserServiceTest

这里用的是 SpringBoot 提供的测试注解,在调用真正的业务方法之前,会先用 APM 进行埋点,监控程序运行情况。

运行结果

运行 UserServiceTest  测试用例,我们可以看到 console 控制台上生成了两种日志格式的信息。

对于文件中的日志呢?我们先把 application.properties 中的配置先注释,再运行一次测试用例,让它生成文件日志。我们去中间件的日志目录和业务的日志目录,可以看到生成了两份日志,日志隔离效果生效。

 

3

源码解析

考虑到直接看源码可能比较枯燥无聊,这里准备了一个流程图,大致分析出了 sofa-common-tools 的整个原理,下面就一些重要的步骤给出解析,如果大家想看源码注释部分,可参考我在 github 上的源码解析工程 ,里面对部分核心代码做了注释。

源码解析工程:https://github.com/masteryourself/sofa-common-tools

①:Spring 容器启动,会发布 ApplicationEnvironmentPreparedEvent 事件(Spring 加载配置文件事件),然后会通知 CommonLoggingApplicationListener  监听器。

②:在这个监听器中,主要是查找是否存在一个这样的 key:key 以 sofa.middleware.log. 开头且 key 不等于 sofa.middleware.log.console 且 key 以 .console 结尾,如果有就先初始化 log,然后 reInitialize。

③:在这里会首先初始化一个 SpaceInfo ,也即每个 SpaceId 对应一个 SpaceInfo , SpaceInfo 里有啥呢,有一个 AbstractLoggerSpaceFactory ,它有多个实现(包含 log4j2、logback 等),看到这里应该就明白了为啥要求每个中间件组件都有一个唯一的 spaceId 的原因了,日志隔离就是靠这个 spaceId 来实现的。

④:从名字上看就知道这是一个多种日志与空间对应管理的类, createILoggerFactory 顾名思义就是创建 AbstractLoggerSpaceFactory ,它实现了 SLF4J 的 ILoggerFactory 接口。如果组件不是以 Spring-Boot 方式启动初始化的,那么就会等到手动调用此 API 的时候再去初始化 logger。

⑤:log4j2 判断:判断规则是看当前 classloader 能够加载到 org.apache.logging.slf4j.Log4jLoggerFactory 类,如果可以加载到,再判断配置文件中是否禁用了 log4j2。logback、log4j、jcl 的判断与之基本类似,请读者自行分析。

⑥:这里加载的规则是读取 spaceName + /log/log4j2/log-conf.xml,也即我们在项目实战中定义的特殊位置的配置文件,如果有多个,则会根据 priority 属性排序。

⑦:初始化 loggerContext,注意它是 log4j2 中的对象,再接下来即是拿到 xml 中的配置,然后去初始化 log 组件,在此不做分析,有兴趣的同学可参考 log4j2 官网研究一下。值得一提的是,在这里 SOFA 团队也提供了扩展机制 Log4j2FilterGenerator,是通过 spi 来做扩展的,通过它可以添加自定义的 filter。

⑧:在这里首先会去判断 logger 是否已经存在,不存在的会调用 newLogger 方法创建,在这个方法里,实际上就是用之前创建的 loggerContext 对象去创建 logger。

⑨:这里会根据配置文件中的值判断是否需要添加 consoleAppender,因为目前 SOFA 只支持通过 properties 添加一个 ConsoleAppender ,并不能在配置文件中配置很高级的自定义 appender。

至此我们应该了解了 sofa-common-tools 的大概原理了,重点主要有如下三个:

  • log-sofa-boot-starter 比 sofa-common-tools 多了个 reInitialize 方法,同时支持通过 Spring 配置文件的方式去设置一些 log 属性;

  • sofa-common-tools 自动发现日志实现是有优先级顺序的,logback > log4j2 > log4j > jcl,但同时也提供了禁用属性来打破这种默认规则;

  • sofa-common-tools 提供了一些 SPI 扩展,如 Log4j2FilterGenerator 、 Log4j2ReInitializer 等,具体可见 jar 包中的 META-INF/services 目录 ;

从 LoggerSpaceFactoryBuilder 类图分析可知,它有四种 LogFactoryBuilder 实现,所以 sofa-common-tools 并不是重复造轮子,底层还是用市面上常见的日志组件去实例化 log 对象。

从 AbstractLoggerSpaceFactory 类图分析可知,它实现了 SLF4J 的 ILoggerFactory 接口,从而替换 SLF4J 的实现。

最后,让我们来看看 sofa-boot 下各个组件之间的日志隔离效果吧。

4

总结

通过上文的分析,我们可以知道这款日志框架的主要作用了:

  • 解决日志冲突问题;

  • 实现日志隔离效果;

  • 动态调试日志级别;

  • 提供了 SPI 扩展,能够自由扩展组件;

  • 提供启动参数,通过设置启动参数可以更改日志的默认行为,使用更加灵活;

其实在整个 SOFA 体系中,sofa-common-tools 也是被广泛使用的,比如 sofa-rpc 中的 RpcLoggerFactory ,sofa-ark 中的 ArkLoggerFactory ,它们都是基于此实现的日志功能。总而言之,这款产品最主要的还是适用于以中间件的形式对外提供服务,如果大家是从事中间件开发或者有类似的需求,不妨可以试一试这款产品,只需要很小的改动,就可以享受到它独特的魅力。

5

欢迎加入,参与 SOFAStack 源码解析

本文为 SOFABoot 的日志隔离功能的介绍,《剖析 | SOFABoot 框架》系列会继续逐步详细介绍各个部分的代码设计和实现,预计按照如下的目录进行:

如果有同学对以上某个主题特别感兴趣的,可以留言讨论,我们会适当根据大家的反馈调整文章的顺序,谢谢大家关注 SOFAStack ,关注 SOFABoot,我们会一直与大家一起成长的。

领取方式:直接回复本公众号想认领的文章名称,我们将会主动联系你,确认资质后,即可加入,It's your show time!除了源码解析,也欢迎提交 issue 和 PR:

SOFABoot:https://github.com/sofastack/sofa-boot

本文归档在 sofastack.tech。

???? 奖励支持 SOFAStack 的你~

* 点下右下角“在看”

* 到公众号对话框发送“加油”,试试手气~

* 本期互动奖品“SOFAStack Community 卫衣”

Unity 2022.3.3 LTS + Visual Studio 2022:手把手教你复刻《吸血鬼幸存者》核心战斗(附完整项目源码) 本文详细介绍了如何使用Unity 2022.3.3 LTS和Visual Studio 2022从零构建《吸血鬼幸存者》式战斗系统。通过图文开发教程,涵盖对象池优化、ECS架构雏形、2D物理碰撞控制等关键技术,帮助开发者高效复刻这款热门游戏的自动攻击与海量刷怪机制。 阅读详情

相关推荐

从零搭建:基于Matlab/Simulink与FlightGear的飞行器实时可视化仿真平台

本文详细介绍了如何从零搭建基于Matlab/Simulink与FlightGear的飞行器实时可视化仿真平台。通过环境准备、模型部署、接口配置及联合仿真等步骤,帮助用户快速掌握飞行器仿真的核心技术,实现高效的三维可视化与实时数据交互。

weixin_29100399的博客 517

SOFABoot源码解析之Readiness检查

        SOFABoot在SpringBoot的Liveness检查能力的基础上,增加了Readiness检查能力。如果你需要使用SOFA中间件,那么建议使用SOFABoot的Readiness检查能力,来更优雅的上线应用实例。一、SpringBoot健康检查        SpringBootActuator帮助我们监控我们的SpringBoot项目。        SpringBoot...

闲来无事 5345

[RK3588-Android12] 深入解析USB Type-C PD充电功能的DTS配置与内核驱动修改

本文深入探讨了在RK3588 Android12平台上禁用USB Type-C PD充电功能的实现方法。通过分析设备树(DTS)配置与内核驱动(TCPM框架)的联动修改,详细解读了如何通过添加`pd-disable`属性及修改`tcpm.c`驱动代码,使Type-C端口绕过PD协议协商,仅工作在传统电源模式,以满足工控等特定场景对供电稳定性和成本控制的需求。

9o8p7i6u5y的博客 994

SOFABoot源码解析之日志空间隔离

一、简述        SOFABoot提供了日志空间隔离能力。        SOFABoot中间件能自动发现SOFABoot应用的日志实现依赖,并独立打印日志,解耦SOFABoot中间件日志和SOFABoot应用日志。        SOFABoot通过其sofa-common-tools包提供日志空间隔离功能。        首先看一下sofa-common-tools包中与日志空间隔离功能...

闲来无事 3719

基于NXP1778的CAN自动波特率检测

一、概念 NXP1778芯片内部自带一个CAN控制器。CAN模块由两部分组成:控制器和验收滤波器。所有的寄存器和RAM都以32位字宽度来访问。 CAN自动波特率检测主要用于以一种CAN的转换的产品中。产品中CAN部分的波特率以前都是通过网页中修改然后配置下去的,依据实际情况的考虑,如果CAN部分的波特率能够根据客户设备的改变而自动改变,将会增加其灵活性。   二、原理 根据CAN控制器的

菜鸟的痕迹专栏 5271

R语言实战:5分钟搞定GEO单细胞数据(scRNA-seq)下载与整理(附完整代码)

本文详细介绍了如何使用R语言快速下载和整理GEO单细胞数据(scRNA-seq),提供完整的自动化处理代码。从环境准备、数据获取到文件整理和质量检查,涵盖10X Genomics标准格式及非标准数据的处理技巧,帮助生物信息学研究者高效完成数据预处理工作。

weixin_29054399的博客 604

蚂蚁SOFA系列(2) - SOFABoot的Readiness健康检查机制

前言 SOFABoot是蚂蚁金服的开源框架,在原有Spring Boot的基础上增强了不少能力,例如Readiness Check,类隔离,日志空间隔离等能力。除此之外,SOFABoot还可以方便的整合SOFA技术栈所包含的各类中间件。如果想要对SOFABoot有体感,可以参考这里快速构建一个SOFABoot的应用。 本文来聊聊SOFABoot新增的Readiness健康检查机制。主要内容有以下...

404P 2471

从零到一:手把手教你用STM32和WiFi打造智能温室大棚的物联网核心

本文详细介绍了如何利用STM32单片机和WiFi技术从零构建智能温室大棚的物联网核心系统。内容涵盖硬件选型、传感器集成、低功耗WiFi通信、自动控制逻辑及OLED显示,提供实际部署中的优化技巧和故障排查方案,帮助开发者打造稳定可靠的农业自动化解决方案。

c7d8e的博客 179

org.hibernate.HibernateException: No CurrentSessionContext configured!

org.hibernate.HibernateException: No CurrentSessionContext configured! at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:620) at com.hibernate.model.TeacherTest.test

CiCi2012_3_6的专栏 941

windows一键安装部署wvp-GB28181-pro视频监控平台

我们可以看到redis、mysql、zlm和wvp都正常运行了。该ip需要修改为wvp服务安装的 服务器的IP。默认用户名和密码分别为admin和admin。

zengliguang的专栏 5748

【35】软考软件设计师——设计模式代码填空(C++版)满分精讲|第5/6题二选一必考

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第35篇,聚焦下午选做题**第5/6题C++版设计模式代码填空**,与上一篇Java版形成双子配套,单题分值稳定12~15分。全文超4000字深度拆解C++独有核心考点:虚函数/纯虚函数、构造与析构函数规范、继承权限、模板类编程在设计模式中的应用;精讲单例、工厂、策略、观察者、适配器五大高频模式的C++专属代码写法,标注所有填空核心点位、语法陷阱、内存安全规范

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 543

空间日志代码_蚂蚁金服研发框架日志隔离解析 | SOFABoot 框架剖析

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。本文为《剖析 | SOFABoot 框架》第二篇,本篇作者阮仁照,来自遨游酒店信息技术。《剖析 | SOFABoot 框架》系列由 SOFA 团队和源码爱好者们出品,项目代号:SO...

weixin_39755873的博客 391

【APM】在Kubernetes中,使用Helm安装Grafana 9.5.1

Grafana是一款流行的开源数据可视化和分析平台,它特别擅长处理时序数据,即随时间变化的数据,因此在监控系统性能、应用程序指标、物联网(IoT)设备数据等领域有着广泛的应用。

CN_Eden 1201

程序集绑定日志记录被关闭_蚂蚁金服研发框架日志隔离解析 | SOFABoot 框架剖析...

SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。本文为《剖析 | SOFABoot 框架》第二篇,本篇作者盲僧,来自遨游酒店信息技术。《剖析 | SOFABoot 框架》系列由 SOFA 团队和源码爱好者们出品,项目代...

weixin_39723102的博客 284

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

蚂蚁金服研发框架总览 | SOFABoot 框架剖析

SOFAStack(Scalable Open FinancialArchitecture Stack)是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件,...

金融级分布式架构 4253

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SOFABoot

前两天在看 SOFABoot 的时候,看到一个让我眼前一亮的东西,来给大家盘一下。SOFABoot,你可能不眼熟,但是没关系,本文也不是给你讲这个东西的,你就认为它是 SpringBoot 的变种就行了。因为有蚂蚁金服背书,所以主要是一些金融类的公司在使用这个框架:官方介绍是这样的:SOFABoot 是蚂蚁金服开源的基于 Spring Boot 的研发框架,它在 Spring Boot 的基础上,提供了诸如 Readiness Check,类隔离,日志空间隔离等能力。

qq_33709529的博客 1866

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SOFA Weekly | SOFABoot 发布、SOFABolt 源码解析系列合辑以及直播预告

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 383

蚂蚁金服服务注册中心数据一致性方案分析 | SOFARegistry 解析

SOFAStack(Scalable Open Financial Architecture Stack) 是蚂蚁金服自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组...

金融级分布式架构 2234

SOFA Weekly | SOFABoot、SOFAArk 发布、9/20 上海线下活动推荐

SOFA WEEKLY | 每周精选,筛选每周精华问答同步开源进展,欢迎留言互动SOFAStack(ScalableOpenFinancialArchitecture Stack)...

金融级分布式架构 314

可以,很强,68行代码实现Bean的异步初始化,粘过去就能用。

你好呀,前两天在看 SOFABoot 的时候,看到一个让我眼前一亮的东西,来给大家盘一下。SOFABoot,你可能不眼熟,但是没关系,本文也不是给你讲这个东西的,你就认为它是 SpringBoot 的变种就行了。

2401_83384536的博客 936

阿里巴巴与蚂蚁集团开源框架SOFA Boot

阿里巴巴与蚂蚁集团开源框架SOFA Boot

weixin_44819874的博客 3734

SOFABoot——基本使用(笔记)

SOFABoot基础

weixin_46949627的博客 4663

sofaBoot实用(1):简单demo程序

sofaBoot的功能: 1、增强SpringBoot的健康检查能力 针对 Spring Boot 缺少 Readiness Check 能力的情况,SOFABoot 增加了 Spring Boot 现有的健康检查的能力,提供了 Readiness Check 的能力。利用 Readiness Check 的能力,SOFAStack 下各种中间件只有在 Readiness Check 通过之后,才将流量引入到应用的实例中,比如 RPC,只有在 Readiness Check 通过之后,才会向服务注册中心

小小代码狩猎者 1468

Logback第九章:日志隔离

问题:日志隔离 这个章节处理一个相对困难的问题,为在同一个 web 或 EJB 容器运行的多个客户端提供一个隔离的日志环境。在接下来的章节中,“应用” 一词用来表示 web 应用以及 J2EE 应用。在隔离的日志环境中,每个应用将会看到一个不同的 logback 环境。所以一个应用的 logback 配置不会影响到另一个。从技术角度看,每个 web 应用都会保存一份 LoggerContext 的独立拷贝。在 logback 中,LoggerContext 产生的每个 logger 对象只要在内存中存活,都

qq_26462567的博客 1465

SpringBoot源码简读——4.2 补充-LoggingApplicationListener以及日志系统

日志的加载 LoggingApplicationListener 监听器 ps.这篇是我最早写的,所以当时还是习惯把ApplicationContext说成容器 支持的事件类型 supportsEventType public boolean supportsEventType(ResolvableType resolvableType) { // 判断事件类型是否支持,所支持的事件...

大风的博客 3147

Springboot内置ApplicationListener--LoggingApplicationListener

源码分析 本文源代码基于 Springboot 2.1.0 package org.springframework.boot.context.logging; import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import ...

Details Inside Spring 4195
上一篇: 欢迎参与 MOSN 源码解析活动
下一篇: 剖析 | 蚂蚁金服生产级 Raft 算法 SOFAJRaft 合辑
SOFAStack
博客等级 码龄7年 747粉丝 389原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值