<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2303字,需瀏覽 5分鐘

           ·

          2022-04-17 15:31


          項目名稱:LogLevelSwitch(運行時動態(tài)日志等級開關(guān))

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

          https://github.com/saigu/LogLevelSwitch

          1、為什么需要LogLevelSwitch

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

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

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

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

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

          2、功能特性

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

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

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


          3、基本架構(gòu)

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

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

          • SwitchContext:? 保存從配置中心獲取的switch開關(guān)狀態(tài)與具體Logger配置信息。通過監(jiān)聽配置中心消息,實時更新switch內(nèi)容,并實現(xiàn)對Logger等級的修改通知。

          • LogContext:保存應(yīng)用原始的Logger與日志級別信息,并能夠根據(jù)switch配置 更新 或 復(fù)原 Logger的等級。


          4、Quick Start

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

          4.1 普通spring項目

          只用三步即可完成。

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


          io.github.saigu
          log-switch-core
          1.0.0-beta
          • STEP 2: 構(gòu)建config Bean

          @Configuration
          public class LogLevelSwitchConfig {
          @Bean
          LogLevelSwitch logLevelSwitch() {
          return new LogLevelSwitch();
          }
          }
          • STEP 3: 接入配置中心

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

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

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

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

          「實現(xiàn)類名」為
          io.github.saigu.log.level.sw.listener.LocalFileListener

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

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


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

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

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

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

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

          4.2?Springboot項目

          兩步接入。

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


          io.github.saigu
          log-switch-starter
          1.0.0-beta
          • STEP 2: 接入配置中心
            同「方式一」


          5、關(guān)鍵配置

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

          參數(shù)名

          含義

          可選值

          status

          開關(guān)狀態(tài)

          「off」: 關(guān)閉,使用應(yīng)用?

          「on」:開啟,使用配置中心的配置等級。

          List

          日志等級list

          如果列表的第一個LoggerBean的name為all,則影響全局logger等級

          參考范例:

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

          6、注意事項

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

          請注意,如果日志提示

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

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

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

          7、詳細(xì)設(shè)計 TL;DR

          本文還是專注于介紹吧,后面再講講實現(xiàn)吧,敬請期待。


          往期熱門筆記合集推薦:


          原創(chuàng):阿丸筆記(微信公眾號:aone_note),歡迎?分享,轉(zhuǎn)載請保留出處。

          沒有留言功能的悲傷,掃描下方二維碼「加我」聊些有的沒的吧




          ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 覺得不錯,就點個?再看?吧??



          瀏覽 52
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文无码日韩无码 | 欧洲亚洲韩国在线观看 | 日韩A片 要操逼网 | 毛片网站入口 | 北条麻妃与黑人 |