144

私たちはプロジェクトでSLF4J+Logbackの組み合わせをしばらく使用しており、非常に満足していますが、ロギング戦略はかなり単純で、単純なクラスベースのロガーを使用し、MDCやマーカーのような派手なものは使用していません。

私が知りたいのは、コミュニティの誰かが実際にこれらの機能を使用しているかどうか、およびロギング/フィルタリングを改善するためにそれらがどのように使用されているかです。

ロギングに[1]マーカーをどこで、なぜ、どのように使用するのか、特に興味があります。それらは、セマンティックコンテキストをロギングに追加するための非常に優れた機能として私を驚かせます。たとえば、クラスが複数の懸念事項を処理している場合でも、タスク/懸念事項固有のマーカーを使用してログステートメントを区別できます。

ロギングでマーカーを作成および使用するためのベストプラクティス、規則、または戦略は何でしょうか。

更新:私が本当に求めているのは、マーカーを使用する理由ではなく、マーカーに名前を付けるためのいくつかの良い方法があると思います(たとえば、スペースやダッシュ/アンダースコア/句読点で区切られたキーワードスタイル名を含むプレーンテキストを使用する) )、ビジネス機能に基づいて名前を付ける「標準名」のプールがある場合。おそらく自分で理解できる質問ですが、これらの機能を体系的に使用して開発者のチームに紹介したい場合は、形式化可能な一連のガイドラインを用意するのが理にかなっています...


[1] -マーカーの使用方法を尋ねることによって、私はAPIの使用方法を実際に尋ねているのではありません(それは本当に非常に簡単です)-私はむしろ、マーカーを一貫して使用してロギングを設定する方法のより一般的なレベルを参照しています

4

5 に答える 5

106

まず、@dariooが言ったように:

  • MDCは、複数のイベントを少数の「エンティティ」に関連付けるために使用されます
  • [マーカー]は、通常のイベントからフィルタリングしたい「特別な」イベントに使用されます

したがって、これにMDCを使用したいというあなたの主張。マーカーは、「スライス」ではなく、「特別な」イベント(必要に応じてフィルタリング)を強調表示するためのものです。たとえば、特定のユーザーに基づいてスライスし、予期しない例外に基づいてフィルタリングする場合があります。この場合、ユーザーMDCディメンションとUnexpectedExceptionマーカーを作成します。


しかし、これは明らかにあなたが考えていた質問に対処していません。あなたは「むしろ、マーカーを一貫して使用してロギングを設定する方法のより一般的なレベルを参照しています」。それでは、次のことに対処しましょう。

MDCはスライスとダイシング用で、マーカーはフィルタリング用です。これらのアクティビティは、テスト中および本番環境で実行されます。そのため、テスト/本番環境が発生したときに、ログデータをスライスするのに役立つと予想されるディメンションと、それをフィルタリングするのに役立つ可能性のあるディメンションを決定する必要があります。各ディメンションはMDCディメンションを取得します。各ケースにマーカーが付けられます。それはそれと同じくらい簡単です。

開発者はここで決定を下す必要はありません。設計時に、 1人の人またはチームが、サポートする必要のあるスライス、ダイシング、およびフィルタリングの種類を決定する必要があります。これは、実行を求められる可能性のある分析タスクの種類を想像することによって通知する必要があります。

この同じ人またはチームが命名規則を決定する必要があります。それは完全に恣意的です。見た目に美しく、自己記述的(最も重要)で、後の追加と競合する可能性が低いほど具体的なものを選択してください。ハイフンとアンダースコアは非常に気まぐれで、驚くほど重要ではありませんが、ESLの従業員がアンダースコアを読むのはそれほど混乱しないかもしれません(少なくともCamelCaseと比較して)同時に、これは、必要なキーに到達するのが厄介なため、一部の開発者を悩ませていると報告されています。

ポリシーを決定する限り、これは、特定のマーカーまたはMDCディメンションを使用する必要がある場合を定義することを意味します。これを厳しく(集中化、意図的に)維持しますが、ディメンションとマーカーのセットが目前のタスクに不十分であると開発者が感じた場合は、開発者からのフィードバックを考慮に入れてください。必要に応じて、寸法や属性を修正/追加します。

このポリシーは、ほとんどの場合、プロジェクト固有のものであることを理解してください。すべてのプロジェクトが同じ種類のロギング分析を必要とするわけではありません。いくつかの悪夢のシナリオを想像してください。次に、そのシナリオでログを分析できるようにする方法を想像してください。どのメッセージがどのコンテキストに属し、どの状態がいつどの状態であるかを追跡するために、複雑なスクリプトを作成する必要はないでしょう。寸法やマーカーなど、必要な情報をすべてエンコードし、問題が発生した場合の手間を省きます。

于 2010-12-15T03:39:20.537 に答える
85

まず、MDC。

MDCは、何らかの動作に関連付けられた1つの「エンティティ」がある環境で非常に役立ちます。典型的な例:ユーザーがWebアプリケーションを操作している。それで、あなたがあなたのウェブアプリをいじり回している多くのユーザーがいるとしましょう。MDCを使用すると、あまり面倒なことなく簡単に追跡できます。簡略化した例:

...[Sandy][abcd] clicked on "change profile"
...[Joe][1234] clicked on "weather reports"
...[Joe][1234] clicked on "Europe"
...[Sandy][abcd] clicked on "logout"
...[Joe][1234] clicked on "logout"
...[Sandy][efgh] logged in

ここでは、ユーザー名とセッションIDの2か所でMDCを使用しています。このようにして、1人のユーザーのセッションを簡単にgrepして、ユーザーが行っているすべてのことを確認できます。

第二に、マーカー。

マーカーは通常、重大な重大なエラーについて管理者に電子メールを送信するなど、「特別な」状況で使用されます。すべてのエラーが常に同じカテゴリに分類されるわけではありません。適切な方法で対処しなければならないものもあります。

または、ユーザーがサービスを終了すると、通常はINFOログに移動しますが、このようなイベントを別のログファイルに記録して監視できるようにする場合は、このようなインスタンスのマーカーを使用することもできます。終了するユーザーの統計的収集のためにより簡単に。

経験則:

  • MDCは、複数のイベントを少数の「エンティティ」に関連付けるために使用されます
  • マーカーは、通常のイベントからフィルタリングしたい「特別な」イベントに使用されます
于 2010-11-12T17:18:42.787 に答える
33

マーカーを使用して、単一のログステートメントにを付けたりマークを付けたりできます。これらの色、つまりマーカーで何をするかは完全にあなた次第です。ただし、マーカーの使用には2つのパターンが一般的であるようです(最初のパターンは2番目のパターンよりも一般的です)。

  1. トリガー:一部のアペンダーは、特定のマーカーの存在下でアクションを実行するように指示される場合があります。たとえば、ログレベルに関係なくSMTPAppender、ログイベントがNOTIFY_ADMINマーカーでマークされるたびに電子メールを送信するように構成できます。ログバックドキュメントのマーカーベースのトリガーを参照してください。ログレベルとマーカーを組み合わせてトリガーすることもできます。

  2. フィルタリング:たとえば、永続性に関連するすべてのログ(さまざまなクラスファイルおよび複数のクラスファイル)を「DB」の色で色付け/マークすることができます。次に、「DB」をフィルタリングできます。DBでマークされたログステートメントを除いて、ログを無効にします。詳細については、ログバックドキュメントのフィルターに関する章を参照してください(MarkerFilterを検索してください)。

于 2012-04-19T15:04:04.543 に答える
13

補遺と同様に、logstashを使用していて、jsonロギングを有効にしている場合は、マーカーの別の潜在的な使用法があります。これは、ロギング変数を特定のログメッセージに関連付けるためのものです。これは、メッセージ本文に含めるよりも一貫性があり、解析が容易です。ユースケースに適している場合は、非常に便利です。

詳細はこちらをご覧ください:

https://github.com/logstash/logstash-logback-encoder#loggingevent_custom_event

于 2015-04-09T11:23:45.200 に答える
0

MDCの利点は、スレッドで通知されることです。最後にログが送信されるメソッドの場合を考えてみましょう。メソッドおよびサブメソッドの呼び出しを通じて、プログラム中に収集された情報をMDCに入力できます。ログが最後に起動されると、MDCと、そこに配置できた可能性のあるすべての情報が含まれます。適切なパターンを使用すると、MDCから情報を取得できます。

一方、マーカーはログに直接関連付けられています。

于 2020-08-27T11:48:09.943 に答える