0

したがって、話は次のようになります。

Microsoft が提供する Logging Enterprise Application ブロックを使用して、アプリケーションのイベントをログに記録しています。

目標は、ロード時にイベント ビューアーのログを有効にしてからオフにすることです。

私がしたことは、すべてのログをイベント ビューアーに書き込む EventLog TraceListener を追加することです。私がやろうとしているのは、アプリケーションの読み込みが完了した後に無効にすることです。私ができる唯一の方法は、LogEnabled フィルターを追加してからオフにすることです。

ただし、実行時にこのフィルターにアクセスして、このリスナーのログを無効にする方法がわかりません。

アイデアがあれば、共有してください。

ありがとう

4

1 に答える 1

1

Enterprise Library のログ記録は、いじる必要のある多くのビットを提供します。では、構成を変更する前に、すぐに使用できる設定のいくつかで、やりたいことを実行できるのではないでしょうか?

アプリケーションが起動時にいくつかのメッセージをログに記録し、それ以上メッセージをログに記録しないようにしたいように思えます。起動メッセージのログ記録がいつ完了したかを明示的に知っていると仮定しています。

上記が当てはまる場合、最も簡単な方法は LogEntry Priority プロパティを使用することだと思います。

構成ファイルで、最小優先度 2 の優先度フィルターを設定します。

<logFilters>
  <add minimumPriority="2" maximumPriority="2147483647" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.PriorityFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null"
    name="Priority" />
  <add enabled="true" type="Microsoft.Practices.EnterpriseLibrary.Logging.Filters.LogEnabledFilter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=null"
    name="LogEnabled Filter" />
</logFilters>

次に、起動時に優先度 2 (またはそれ以上) を使用してメッセージをログに記録します。次に、完了したことがわかったら、優先度を 1 に下げます。

私はそれをよりよくカプセル化しますが、コードサンプルは次のようになります:

public class MyApp
{
    public static int LogPriority = 2;
    public static readonly string MyAppCategory = "MyAppCategory";

    static void Main()
    {
        Logger.Write("Loading 1...", MyAppCategory, LogPriority);
        // ...       
        Logger.Write("Loading 2...", MyAppCategory, LogPriority);

        // Done loading so turn off logging
        LogPriority = 1;

        Logger.Write("Message not logged", MyAppCategory, LogPriority);
    }
}


アプリの残りのログを有効にしたい場合は、優先度フィルターを 2 から 1 に下げるだけで、すべてがログに記録されます。

于 2010-05-04T23:14:34.457 に答える