0

所以故事是这样的:

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

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

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

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

如果您有想法,请分享。

谢谢

4

1 回答 1

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,所有内容都会被记录。

于 2010-05-04T23:14:34.457 回答