1

管理者は、構成で LogEnabledFilter の有効なプロパティを変更して、実行時のログ記録を有効/無効にする必要があります。

SO には回避策を説明するスレッドがいくつかありますが、私はこのようにしたいと考えています。Logging Enabled Filter を次のように変更しようとしました。

private static void FileConfigurationSourceChanged(object sender, ConfigurationSourceChangedEventArgs e)
{
    var fcs = sender as FileConfigurationSource;

    System.Diagnostics.Debug.WriteLine("----------- FileConfigurationSourceChanged called --------");

    LoggingSettings currentLogSettings = e.ConfigurationSource.GetSection("loggingConfiguration") as LoggingSettings;
    var fdtl = currentLogSettings.TraceListeners.Where(tld => tld is FormattedDatabaseTraceListenerData).FirstOrDefault();
    var currentLogFileFilter = currentLogSettings.LogFilters.Where(lfd => { return lfd.Name == "Logging Enabled Filter"; }).FirstOrDefault();
    var filterNewValue = (bool)currentLogFileFilter.ElementInformation.Properties["enabled"].Value;

    var runtimeFilter = Logger.Writer.GetFilter<LogEnabledFilter>("Logging Enabled Filter");
    runtimeFilter.Enabled = filterNewValue;

   var test =  Logger.Writer.IsLoggingEnabled();

}

ただし、テストでは常に最初にロードされた構成値が明らかになり、変更されません。構成の値を変更すると、変更がランタイム構成に自動的に反映されると思いました。しかし、そうではありません!上記のコードに示すようにプログラムで設定しても機能しません。

Enterprise Library を再構築するか、シャットダウンする時が来ました。

4

2 に答える 2

0

アップデート:

Randy Levy は、上記の回答で修正を提供しました。修正を実装し、エンタープライズ ライブラリを再コンパイルします。

Randy Levy からの回答は次のとおりです。

はい、LogEnabledFiter を設定することでログを無効にすることができます。これを行う主な方法は、構成ファイルを手動で編集することです。これがその機能の主な目的です (開発者ガイドでは、管理者がこの設定を微調整することを参照しています)。フィルターを設定する他の同様のアプローチは、元のファイルベースの構成をプログラムで変更する (これは基本的にブロックの再構成です) か、プログラムでブロックを再構成します (たとえば、流暢なインターフェースを使用)。プログラムによるアプローチはどれも、私が単純と呼ぶものではありません – Randy Levy 39 分前


フィルターを取得して無効にしようとしても、再構成しないと影響はないと思います。したがって、次のコードは引き続きログに記録されます。 var enabledFilter = logWriter.GetFilter(); enabledFilter.Enabled = false; logWriter.Write("テスト"); EntLib 以外のアプローチの 1 つは、bool プロパティとヘルパー クラスを使用して自分で有効化/無効化を管理することです。しかし、優先アプローチはかなり単純な選択肢だと思います。

結論:

カスタム Logger クラスで IsLoggenabled プロパティを実装し、実行時にこれを変更/チェックします。

これはうまくいきません:

var runtimeFilter = Logger.Writer.GetFilter<LogEnabledFilter>("Logging Enabled Filter");
runtimeFilter.Enabled = false/true;
于 2016-09-16T20:09:53.340 に答える