自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

手寫了個(gè)小中間件,開源啦

開源
通過日志進(jìn)行業(yè)務(wù)關(guān)鍵邏輯的輸出,是定位問題的有效手段之一。但是,過多的日志記錄又會(huì)對(duì)系統(tǒng)造成額外的開銷,極端情況下,甚至可能導(dǎo)致系統(tǒng)宕機(jī)。

項(xiàng)目名稱:LogLevelSwitch(運(yùn)行時(shí)動(dòng)態(tài)日志等級(jí)開關(guān))。

項(xiàng)目地址,走過路過可以點(diǎn)個(gè)star :)

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

1、為什么需要LogLevelSwitch

隨著業(yè)務(wù)規(guī)模不斷擴(kuò)大,每一次線上故障的快速定位都是對(duì)開發(fā)同學(xué)的巨大挑戰(zhàn)。

通過日志進(jìn)行業(yè)務(wù)關(guān)鍵邏輯的輸出,是定位問題的有效手段之一。但是,過多的日志記錄又會(huì)對(duì)系統(tǒng)造成額外的開銷,極端情況下,甚至可能導(dǎo)致系統(tǒng)宕機(jī)。

因此,為了兼顧性能和故障場(chǎng)景下的快速定位,我們需要能夠?qū)崟r(shí)調(diào)整日志等級(jí),以便輸出更多的日志信息排查線上問題,或是減少日志打印帶來的性能消耗。

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

LogLevleSwitch以中間件的形式嵌入應(yīng)用,基于配置中心的熱更新能力,實(shí)現(xiàn)了應(yīng)用運(yùn)行時(shí)動(dòng)態(tài)調(diào)整日志等級(jí)的能力。

2、功能特性

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

擴(kuò)展性:可以使用默認(rèn)的基于本地配置文件的配置修改方式(僅供本地測(cè)試學(xué)習(xí)使用)。生產(chǎn)上,「強(qiáng)烈推薦」 通過SPI接入你自己的配置中心,實(shí)現(xiàn)熱更新。

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

3、基本架構(gòu)

在應(yīng)用Application中引入我們的LogLevelSwitch。

LogLevelSwitch包含兩個(gè)核心組件,LogContext和SwitchContext。

  • SwitchContext: 保存從配置中心獲取的switch開關(guān)狀態(tài)與具體Logger配置信息。通過監(jiān)聽配置中心消息,實(shí)時(shí)更新switch內(nèi)容,并實(shí)現(xiàn)對(duì)Logger等級(jí)的修改通知。
  • LogContext:保存應(yīng)用原始的Logger與日志級(jí)別信息,并能夠根據(jù)switch配置 更新 或 復(fù)原 Logger的等級(jí)。

4、Quick Start

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

(1) 普通spring項(xiàng)目

只用三步即可完成。

STEP 1: 應(yīng)用中pom引入依賴。

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

STEP 2: 構(gòu)建config Bean。

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

STEP 3: 接入配置中心。

聲明配置中心的SPI實(shí)現(xiàn)。

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

實(shí)現(xiàn)一:項(xiàng)目自帶的LocalFile配置中心。

如果你還沒有自己的配置中心,那就使用我們自帶的基于本地配置文件進(jìn)行本地測(cè)試學(xué)習(xí)。

「實(shí)現(xiàn)類名」為:

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

注意,生產(chǎn)上 強(qiáng)烈推薦 通過「實(shí)現(xiàn)二」接入你自己的配置中心,實(shí)現(xiàn)熱更新。

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

然后填寫開關(guān)配置:

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

實(shí)現(xiàn)二:自定義SPI擴(kuò)展配置,接入自己的配置中心。

如果你已經(jīng)有了自己的配置中心,那就可以通過SPI擴(kuò)展配置,接入自己的配置中心。

「實(shí)現(xiàn)類名」為你自己的實(shí)現(xiàn)類名。

(2) Springboot項(xiàng)目

兩步接入。

STEP 1: 應(yīng)用中pom引入依賴。

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

STEP 2: 接入配置中心。

同「方式一」。

5、關(guān)鍵配置

SwitchContext是我們的關(guān)鍵配置:

參考范例:

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

6、注意事項(xiàng)

為了規(guī)范日志使用,同時(shí)避免影響降級(jí)開關(guān)效果,初始化的時(shí)候會(huì)去檢測(cè)項(xiàng)目中依賴的日志框架實(shí)現(xiàn)。

請(qǐng)注意,如果日志提示

“存在多個(gè)日志框架實(shí)現(xiàn),建議只保留一個(gè),否則會(huì)影響日志降級(jí)開關(guān)效果”

說明檢測(cè)到了應(yīng)用中引入了多個(gè)日志框架實(shí)現(xiàn)。

建議從pom中進(jìn)行移除多余日志框架,確保采用唯一日志框架實(shí)現(xiàn)。

責(zé)任編輯:姜華 來源: 阿丸筆記
相關(guān)推薦

2022-08-09 08:31:29

RocketMQ消息中間件

2011-10-28 09:20:36

dorado

2011-10-24 07:41:38

SOA中間件應(yīng)用服務(wù)器

2021-09-09 09:05:30

開源字節(jié)跳動(dòng)CloudWeGo

2021-02-11 08:21:02

中間件開發(fā)CRUD

2011-05-24 15:10:48

2013-05-17 17:01:32

紅帽OpenShifPaaS云

2019-12-13 10:32:56

開源消息中間件

2018-07-29 12:27:30

云中間件云計(jì)算API

2018-02-01 10:19:22

中間件服務(wù)器系統(tǒng)

2013-05-17 15:08:19

紅帽

2016-11-11 21:00:46

中間件

2023-06-29 10:10:06

Rocket MQ消息中間件

2023-10-24 07:50:18

消息中間件MQ

2009-06-16 15:55:06

JBoss企業(yè)中間件

2012-11-30 10:21:46

移動(dòng)中間件

2013-03-27 10:04:21

云計(jì)算開源中間件

2013-03-27 10:11:23

云計(jì)算紅帽

2024-06-12 13:40:58

2010-09-09 09:07:36

開源平臺(tái)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)