故事就这样:
我正在使用microsoft提供的Logging Enterprise Application块来记录我们应用程序中的事件。
目标是在加载时启用事件查看器日志记录,然后将其关闭。
我所做的是添加EventLog TraceListener,它将我们所有的日志都写入事件查看器。我正在尝试做的是在应用程序加载完成后禁用它。我可以做的唯一方法是添加一个LogEnabled过滤器,然后将其关闭。
但是,我不知道如何在运行时访问此过滤器并禁用此侦听器上的登录。
如果您有任何想法,请分享。
由于
答案 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即可记录所有内容。