Logging 在运行时关闭LogEnabled筛选器-记录企业应用程序块

Logging 在运行时关闭LogEnabled筛选器-记录企业应用程序块,logging,enterprise-library,application-blocks,Logging,Enterprise Library,Application Blocks,故事是这样的: 我正在使用microsoft提供的Logging Enterprise应用程序块来记录应用程序中的事件 目标是在加载时启用事件查看器日志记录,然后将其关闭 我所做的是添加EventLog TraceListener,它将所有日志写入事件查看器。我试图做的是在应用程序加载完成后禁用它。我唯一能做的就是添加一个LogEnabled过滤器,然后关闭它 但是,我不知道如何在运行时访问此筛选器并禁用此侦听器上的日志 如果你有想法,请分享 谢谢企业库日志记录提供了大量的数据。所以,在开始改变

故事是这样的:

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

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

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

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

如果你有想法,请分享


谢谢

企业库日志记录提供了大量的数据。所以,在开始改变配置之前,也许一些现成的设置可以让你做你想做的事情

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

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

您的TraceListener设置是否通过配置?是否要以编程方式禁用日志记录?为什么这么复杂?LogEnabledFilter条目的用途是什么?如果在运行时无法将其设置为false,则表示:禁用日志记录?是的,可以通过设置LogEnabledFilter来禁用日志记录。实现这一点的主要方法是手动编辑配置文件——这是该功能的主要目的(《开发人员指南》参考管理员调整此设置)。设置过滤器的其他类似方法是以编程方式修改原始的基于文件的配置(本质上是块的重新配置),或以编程方式重新配置块(例如使用fluent接口)。没有一种编程方法是我所说的simplei如果你尝试获取过滤器并禁用它,我认为如果不重新配置,它不会有任何影响。因此,以下代码仍然以日志记录结束:
var enabledFilter=logWriter.GetFilter();enabledFilter.Enabled=false;logWriter.Write(“测试”)一种非EntLib方法只需要使用bool属性和helper类管理enable/disable。但是我认为优先权方法是一个非常直接的选择。刚刚发布了一个关于这个问题的问题哈哈,好的,我会通过一个外部bool属性来实现:-)。但是你能解释一下为什么它不起作用吗?Logger.IsLoggingEnabled()始终返回最初加载的值。手动更改该值不会如您在评论中所述起作用。为什么
LogEnabledFilter
不可更新?你不会相信的令人震惊的答案:)
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);
    }
}