プロジェクトの住所、通り過ぎるときに星をクリックできます:)
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…(過去の記事をチェックするのは非常に便利です)