6

メソッドの動作は何にLogWriter.ShouldLog(..)基づいていますか? または、その使用の本当の意図は何ですか? そのドキュメントページはかなりまばらで、多くの洞察を提供していません. それを引用:

LogEntry をログに記録する必要があるかどうかを問い合わせます。

( Enterprise Library のすべてのバージョンで同じタイプミスがあり、作成者がそれに十分注意を払っていたのか疑問に思います。 )

この方法は、私にはかなり非現実的なように思えます。ログに記録する前に常に確認する必要がありますか?

現在LogWriter.IsLoggingEnabled(..)、構成の明示的な設定に基づいているかどうかのみを確認します。これは具体的なシナリオを表しています。つまり、ロギングがオンまたはオフになっています。

4

1 に答える 1

6

行動

LogWriter.ShouldLog( LogEntry logEntry )特定の LogEntry をログに記録する必要があるかどうかを判断するために、LogEntry 内のデータに対してすべての構成済みフィルターを照会します。すべてのフィルターが true (ShouldLog の場合) を返す場合、Writeメソッドが呼び出された場合に LogEntry がログに記録されます。独自のカスタム フィルターを作成することもできますが、すぐに使用できるフィルターは、Category、Priority、および LoggingEnabled です。

対照的に、IsLoggingEnabledチェックは 1 つのフィルターのみをチェックしますが、ShouldLog呼び出しはすべてのフィルター (を含むIsLoggingEnabled) をチェックします。

目的

呼び出しの意図は、開発者がログに記録されない場合にコストのかかる操作を回避できるようにすることLogEntryです。何が「高価」かは、アプリケーションと要件によって異なります。たとえば、タイトなループでの過剰な文字列操作や、何らかの情報を取得するためのプロセス外呼び出し (ただし、キャッシュの対象となる可能性があります)。

ログに記録する前に常に確認する必要がありますか?

ShouldLog一般的に、やむを得ない理由がない限り、電話は避けます。

いくつかの理由が考えられます:

  1. コードが乱雑になる
  2. ヘルパー メソッドを使用してコードを整理しようとすると、LogEntry は通常完全に読み込まれるため、とにかく操作を回避できなかったでしょう (ただし、デリゲートを渡して呼び出さなくてもかまいませんが、よくわかりません)。それは物事をより単純にすることです)
  3. 内部的には、Write メソッドが既に呼び出されているShouldLogため、ログを記録している場合は、ログにShouldLog記録されたメッセージごとに 2 回呼び出されます。
于 2011-04-05T20:27:39.403 に答える