精品一区二区三区在线成人,欧美精产国品一二三区,Ji大巴进入女人66h,亚洲春色在线视频

手寫了個小中間件,開源啦

開源
通過日志進行業務關鍵邏輯的輸出,是定位問題的有效手段之一。但是,過多的日志記錄又會對系統造成額外的開銷,極端情況下,甚至可能導致系統宕機。

項目名稱:LogLevelSwitch(運行時動態日志等級開關)。

項目地址,走過路過可以點個star :)

https://github.com/saigu/LogLevelSwitch。

1、為什么需要LogLevelSwitch

隨著業務規模不斷擴大,每一次線上故障的快速定位都是對開發同學的巨大挑戰。

通過日志進行業務關鍵邏輯的輸出,是定位問題的有效手段之一。但是,過多的日志記錄又會對系統造成額外的開銷,極端情況下,甚至可能導致系統宕機。

因此,為了兼顧性能和故障場景下的快速定位,我們需要能夠實時調整日志等級,以便輸出更多的日志信息排查線上問題,或是減少日志打印帶來的性能消耗。

基于以上背景,我們的LogLevelSwitch誕生了。

LogLevleSwitch以中間件的形式嵌入應用,基于配置中心的熱更新能力,實現了應用運行時動態調整日志等級的能力。

2、功能特性

兼容性:支持Log4j、Log4j2、Logback等。

擴展性:可以使用默認的基于本地配置文件的配置修改方式(僅供本地測試學習使用)。生產上,「強烈推薦」 通過SPI接入你自己的配置中心,實現熱更新。

易用性:接入簡單,效果拔群,只要5分鐘你就能用上。

3、基本架構

在應用Application中引入我們的LogLevelSwitch。

LogLevelSwitch包含兩個核心組件,LogContext和SwitchContext。

  • SwitchContext: 保存從配置中心獲取的switch開關狀態與具體Logger配置信息。通過監聽配置中心消息,實時更新switch內容,并實現對Logger等級的修改通知。
  • LogContext:保存應用原始的Logger與日志級別信息,并能夠根據switch配置 更新 或 復原 Logger的等級。

4、Quick Start

話不多說了,快來嘗嘗鮮吧。

(1) 普通spring項目

只用三步即可完成。

STEP 1: 應用中pom引入依賴。

<dependency>
<groupId>io.github.saigu</groupId>
<artifactId>log-switch-core</artifactId>
<version>1.0.0-beta</version>
</dependency>

STEP 2: 構建config Bean。

@Configuration
public class LogLevelSwitchConfig {
@Bean
LogLevelSwitch logLevelSwitch() {
return new LogLevelSwitch();
}
}

STEP 3: 接入配置中心。

聲明配置中心的SPI實現。

  • 在resource路徑下新建 META-INF/services,創建文件名為
  • io.github.saigu.log.level.sw.listener.ConfigListener的文件,并寫入需要的「實現類名」。

實現一:項目自帶的LocalFile配置中心。

如果你還沒有自己的配置中心,那就使用我們自帶的基于本地配置文件進行本地測試學習。

「實現類名」為:

io.github.saigu.log.level.sw.listener.LocalFileListener

注意,生產上 強烈推薦 通過「實現二」接入你自己的配置中心,實現熱更新。

在resource目錄下新建LocalSwitch.json文件:

然后填寫開關配置:

{
"status": "on",
"loggerBeans": [
{
"name": "all",
"level": "error"
}
]
}

實現二:自定義SPI擴展配置,接入自己的配置中心。

如果你已經有了自己的配置中心,那就可以通過SPI擴展配置,接入自己的配置中心。

「實現類名」為你自己的實現類名。

(2) Springboot項目

兩步接入。

STEP 1: 應用中pom引入依賴。

<dependency>
<groupId>io.github.saigu</groupId>
<artifactId>log-switch-starter</artifactId>
<version>1.0.0-beta</version>
</dependency>

STEP 2: 接入配置中心。

同「方式一」。

5、關鍵配置

SwitchContext是我們的關鍵配置:

參考范例:

{
"status": "on",
"loggerBeans": [
{
"name": "all",
"level": "error"
}
]
}

6、注意事項

為了規范日志使用,同時避免影響降級開關效果,初始化的時候會去檢測項目中依賴的日志框架實現。

請注意,如果日志提示

“存在多個日志框架實現,建議只保留一個,否則會影響日志降級開關效果”

說明檢測到了應用中引入了多個日志框架實現。

建議從pom中進行移除多余日志框架,確保采用唯一日志框架實現。

責任編輯:姜華 來源: 阿丸筆記
相關推薦

2011-10-28 09:20:36

dorado

2022-08-09 08:31:29

RocketMQ消息中間件

2011-10-24 07:41:38

SOA中間件應用服務器

2021-09-09 09:05:30

開源字節跳動CloudWeGo

2025-06-12 08:34:48

云原生開源中間件

2011-05-24 15:10:48

2021-02-11 08:21:02

中間件開發CRUD

2013-05-17 15:08:19

紅帽

2013-05-17 17:01:32

紅帽OpenShifPaaS云

2019-12-13 10:32:56

開源消息中間件

2016-11-11 21:00:46

中間件

2018-02-01 10:19:22

中間件服務器系統

2018-07-29 12:27:30

云中間件云計算API

2012-11-30 10:21:46

移動中間件

2009-06-16 15:55:06

JBoss企業中間件

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2013-03-27 10:11:23

云計算紅帽

2013-03-27 10:04:21

云計算開源中間件

2024-06-12 13:40:58

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 长寿区| 海伦市| 东宁县| 精河县| 襄垣县| 岚皋县| 昌图县| 新宾| 江西省| 仁寿县| 蛟河市| 湟源县| 浙江省| 绵阳市| 甘泉县| 章丘市| 城固县| 临西县| 正宁县| 延庆县| 进贤县| 丰台区| 衡东县| 措勤县| 龙口市| 武胜县| 宁河县| 海伦市| 麻江县| 康乐县| 佳木斯市| 若尔盖县| 聊城市| 滁州市| 浦江县| 疏附县| 宜春市| 上栗县| 弥勒县| 蒲城县| 呼和浩特市|