小さなミドルウェア、オープンソースを書いた

プロジェクトの住所、通り過ぎるときに星をクリックできます:)

github.com/saigu/LogLe…

1.LogLevelSwitchが必要な理由

ビジネス規模の継続的な拡大に伴い、各オンライン障害の迅速な特定は開発者にとって大きな課題です。

ログを介したビジネスクリティカルなロジックの出力は、問題を特定するための効果的な手段の1つです。ただし、過剰なロギングはシステムに追加のオーバーヘッドを引き起こし、極端な場合には、システムのダウンタイムにつながる可能性さえあります。

したがって、障害シナリオでパフォーマンスと高速ロケーションの両方を考慮に入れるには、ログレベルをリアルタイムで調整して、オンラインの問題をトラブルシューティングするためのログ情報をより多く出力したり、ログ印刷。

オープンソースの小さなミドルウェアを作成しました-実行時に動的ログレベルスイッチ

上記の背景に基づいて、LogLevelSwitchが誕生しました。

LogLevleSwitchは、ミドルウェアの形でアプリケーションに組み込まれています。構成センターのホットアップデート機能に基づいて、アプリケーションの実行時にログレベルを動的に調整する機能を実現します。

2.機能

  • 互換性:Log4j、Log4j2、Logbackなどをサポートします。
  • 拡張性:デフォルトのローカル構成ファイルベースの構成変更方法を使用できます(ローカルテストと学習のみ)。本番環境では、SPIを介して独自の構成センターにアクセスし、ホットアップデートを実行することを「強くお勧めします」。
  • 使いやすさ:アクセスが簡単で、優れた効果があり、わずか5分で使用できます。

3.基本アーキテクチャ

オープンソースの小さなミドルウェアを作成しました-実行時に動的ログレベルスイッチ

アプリケーションアプリケーションにLogLevelSwitchを導入します。

LogLevelSwitchには、LogContextとSwitchContextの2つのコアコンポーネントが含まれています。

  • SwitchContext:構成センターから取得したスイッチステータスと特定のロガー構成情報を保存します。コンフィギュレーションセンターのメッセージを監視することにより、スイッチの内容がリアルタイムで更新され、ロガーレベルの変更通知が実現されます。
  • LogContext:アプリケーションの元のロガーとログレベルの情報を保存し、スイッチの構成に従ってロガーレベルを更新または復元できます。

4.クイックスタート

言うまでもありませんが、ぜひお試しください。

4.1 普通spring项目

只用三步即可完成。

  • STEP 1: 应用中pom引入依赖

    io.github.saigu log-switch-core 1.0.0-beta
  • 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扩展配置,接入自己的配置中心。

「实现类名」为你自己的实现类名。

4.2 springboot项目

两步接入。

  • STEP 1: 应用中pom引入依赖

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

5.关键配置

SwitchContext是我们的关键配置:

参数名

含义

可选值

status

开关状态

「オフ」:無効にし、アプリケーションを使用します。「オン」:有効にし、構成センターの構成レベルを使用します。

リスト

ログレベルリスト

リストの最初のLoggerBeanの名前がす​​べての場合、グローバルロガーレベルに影響します

参考例:

{
  "status": "on",
  "loggerBeans": [
    {
      "name": "all",
      "level": "error"
    }
  ]
}
复制代码

6.注意事項

ログの使用を標準化し、ダウングレードスイッチの効果に影響を与えないようにするために、プロジェクトが依存するログフレームワークの実装が初期化中に検出されます。

ログプロンプトが表示された場合は注意してください

「複数のログフレームワークの実装があります。1つだけを保持することをお勧めします。そうしないと、ログダウングレードスイッチの効果に影響します。」

アプリケーションで複数のロギングフレームワークの実装が検出されたことを示します。

一意のロギングフレームワークが使用されるように、pomから冗長なロギングフレームワークを削除することをお勧めします。

7.詳細設計TL;DR

この記事はまだ紹介に焦点を当てています、そして私は後で実装について話しますので、お楽しみに。

全部見てきましたが、オリジナリティは簡単ではありませんので、フォローして気に入ってください〜

ナレッジフラグメントを再編成し、Javaナレッジマップを作成します:github.com/saigu/JavaK…(過去の記事をチェックするのは非常に便利です)

おすすめ

転載: juejin.im/post/7085215463499792414