ホームページ  >  記事  >  バックエンド開発  >  実行時にザップロガーのログレベルを更新することはできますか?

実行時にザップロガーのログレベルを更新することはできますか?

王林
王林転載
2024-02-08 23:20:311049ブラウズ

是否可以在运行时更新 zap 记录器的日志级别?

PHP エディタ Xigua では、実行時に ZAP レコーダーのログ レベルを更新することが一般的です。 zap は、アプリケーションの実行情報の取得と記録に役立つ強力なログ ツールです。通常、アプリケーションの起動時に zap のログ レベルを設定する必要がありますが、実際のニーズに応じて調整するために、実行時にログ レベルを動的に更新できるようにしたい場合があります。 zap では、zap の Logger インターフェイスが提供するメソッドを使用してこの機能を実現できます。具体的には、「zap.Info()」、「zap.Debug()」、「zap.Warn()」およびその他のメソッドを使用して、ログ レベルを動的に更新できます。このようにして、必要に応じて実行時に zap のロギング動作を柔軟に調整できます。

質問の内容

私は kubebuilder を使用してロガーを作成しました。これは、zap ロガーに基づいています:

リーリー

ここで、実行時にログ レベルを zapcore.infolevel に変更したいと思います。 setloglevel または同様の API は見つかりませんでした。

新しいオプションを作成してから、新しいレベルを設定する必要がありますか?

また、sigs.k8s.io/controller-runtime/pkg/log/zap ライブラリを使用してロガーを設定する必要があります。ロガーのインターフェイスは、logr.logger インターフェイスを実装する go-logr から取得されます。これを zapcore.newcore に変更しようとすると、ctrl.setlogger を使用してロガーを設定できなくなります。

zap.options のすべてのオプションを更新し、ログ レベルを変更し、引き続き sigs.k8s.io/controller-runtime/pkg/log/zap# を使用するオプションを維持したいと考えています。 # ザップイン #。

こんなことは可能でしょうか?

sigs.k8s.io/controller-runtime/pkg/log/zap および sigs.k8s.io/controller-runtime?

解決策

より良い答え: @oliver dainの提案に従い、zap.atomiclevelを使用してください。詳細については、回答を参照してください。

別のオプションは、カスタム

levelenabler 関数を使用してコアを作成することです。 zap.levelenablerfunc を使用して、クロージャを zapcore.levelenabler に変換できます。

関連資料:

levelenabler メッセージをログに記録するときに、指定されたログ レベルが有効かどうかを決定します。

levelenablerfunc は、匿名関数を使用して zapcore.levelenabler を実装する便利な方法です。

関数は、実行時に変更される他の変数に応じて、

true または false を返す場合があります: リーリー

ps: このコードは人工的なものです。プログラムでは、

infoenabled 変数に対して初期化、ランタイム値の変更、および適切な同期 (必要な場合) を実装する必要があります。

この例はプレイグラウンドで実行できます:

https://play.golang.org/p/ot3nvnp1bwc

以上が実行時にザップロガーのログレベルを更新することはできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。