私はEF 5を使用していますが、ShouldLogメソッドを使用してLogEntryを実際にログに記録するかどうかを判断しようとしています。私の問題は、特定のレベルを除外するフィルタがある場合でも、必ずShouldLogがtrueを返すということです。フィルタは機能し、エントリはログに記録されませんが、ShouldLogは動作していないように見えます。エンタープライズフレームワークのロギング - ShouldLogがSourceLevelフィルタと連携しない
私はそうのように私のロガーを設定しています:
internal static void ConfigureLogging(SourceLevels logLevel)
{
var builder = new ConfigurationSourceBuilder();
builder.ConfigureLogging()
.LogToCategoryNamed("General")
.WithOptions.SetAsDefaultCategory()
.SendTo.FlatFile("Main log file")
.FormatWith(
new FormatterBuilder()
.TextFormatterNamed("Text Formatter")
.UsingTemplate("{timestamp(local:MM/dd/yyyy HH:mm:ss.fff)} [{severity}] {message}"))
.Filter(logLevel) //Setting the source level filter
.ToFile("log.txt");
var configSource = new DictionaryConfigurationSource();
builder.UpdateConfigurationWithReplace(configSource);
EnterpriseLibraryContainer.Current
= EnterpriseLibraryContainer.CreateDefaultContainer(configSource);
}
そして、このようにそれをテスト:
ConfigureLogging(SourceLevels.Warning); //Do not allow Information level
var logEntry = new LogEntry { Message = "test", Severity = TraceEventType.Information };
var shouldLog = Logger.Writer.ShouldLog(logEntry);
Logger.Writer.Write(logEntry);
私はこのコードを実行した後shouldLog変数が真のですが、何のログエントリが書き込まれていません。 SourceLevels.InformationをConfigureLoggingメソッドに渡すと、代わりにログに書き込まれたエントリが取得されます。私は何か間違っているのですか?
徹底的な対応をいただきありがとうございます。クイックフォローアップ、私の目標は、log4netのIsDebugEnabledなどと同様のプロパティを実装することです。このカスタムSourceLevelフィルタは、このタイプのものを動作させる唯一の方法ですか、それともShouldLogを避ける方法ですか?ロギングの前に現在のログレベルをチェックするのは、すぐに使用できるシナリオであるはずです。 – knms
@knms:複数のカテゴリを使用する予定があるかどうか聞かせてください。例えば。データレイヤー、UI、パフォーマンスなど –
これは社内のチームによって使用される汎用のログラッパーであるため、複数のカテゴリを活用するかどうかは予測できません。ログレベルを示すカテゴリを使用することをお勧めしますか? – knms