我有一个Web应用程序,我想在运行时添加或编辑Enterprise Library日志记录。我熟悉如何通过编程方式和配置文件完全配置EntLib Logging,但我想使用两者的组合。我想通过配置文件设置一些基本的TraceListeners,但是在应用程序启动时,我想根据存储在数据库中的一些其他用户设置有条件地添加一些Email TraceListeners。
我目前的解决方案是打开web.config作为Configuration对象,并手动修改web.config部分,但我想知道是否有一种方法可以以编程方式将TraceListeners添加到当前配置的LogWriter(或其中任何一个)类。
有什么建议吗?
答案 0 :(得分:2)
您需要创建一个EmailTraceListener,然后将其添加到您的类别的TraceSources集合中。
在此示例中,我有一个指向平面文件的基本跟踪侦听器。
<add fileName="trace.log" header="----------------------------------------"
footer="----------------------------------------" formatter="Text Formatter"
listenerDataType="Microsoft.Practices.EnterpriseLibrary.Logging.Configuration.FlatFileTraceListenerData, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
traceOutputOptions="None" filter="All" type="Microsoft.Practices.EnterpriseLibrary.Logging.TraceListeners.FlatFileTraceListener, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
name="FlatFile TraceListener" />
使用以下类别来源:
<categorySources>
<add switchValue="All" name="General">
<listeners>
<add name="FlatFile TraceListener" />
</listeners>
</add>
</categorySources>
然后使用代码,我可以将一个EmailTraceListener添加到TraceSources集合。
var emailTraceListener = new EmailTraceListener("foo@bar.com", "foo@bar.com", "Food", "Bar",
"smtp.foo.bar") {Name = "EmailTraceListener"};
LogSource logSource;
Logger.Writer.TraceSources.TryGetValue("General", out logSource);
logSource.Listeners.Add(emailTraceListener);
var logEntry = new LogEntry {Message = "Test"};
Logger.Write(logEntry);
运行此示例然后将生成一封包含LogEntry信息的电子邮件以及日志文件trace.log中的条目
答案 1 :(得分:0)
要切换过滤器,您可以使用LogWriter / Logger类'GetFilter方法检索过滤器,然后对其进行操作。例如,我们的配置中有一个启用日志记录的过滤器。我们可以通过以下方式切换:
var filter = Logger.GetFilter<LogEnabledFilter>("<logging enabled filter name>");
filter.Enabled = true; // or false
希望这有帮助。