在运行时关闭LogEnabled Filter - 记录企业应用程序块

时间:2010-05-04 18:07:20

标签: logging enterprise-library application-blocks

故事就这样:

我正在使用microsoft提供的Logging Enterprise Application块来记录我们应用程序中的事件。

目标是在加载时启用事件查看器日志记录,然后将其关闭。

我所做的是添加EventLog TraceListener,它将我们所有的日志都写入事件查看器。我正在尝试做的是在应用程序加载完成后禁用它。我可以做的唯一方法是添加一个LogEnabled过滤器,然后将其关闭。

但是,我不知道如何在运行时访问此过滤器并禁用此侦听器上的登录。

如果您有任何想法,请分享。

由于

1 个答案:

答案 0 :(得分:1)

企业库日志记录提供了大量的信息。那么,在更改配置之前,某些开箱即用的设置可以让你做你想做的事情吗?

听起来我希望您的应用程序在启动期间记录一些消息,然后不再记录任何消息。我假设您明确知道何时完成了记录启动消息。

如果上述情况属实,我认为最简单的方法是使用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即可记录所有内容。