C# EntLib日志记录-在运行时添加/编辑TraceListener
我有一个web应用程序,希望在运行时添加或编辑企业库日志记录。我熟悉如何以编程方式并通过配置文件完全配置EntLib日志记录,但我希望将两者结合使用。我希望通过配置文件设置一些基本TraceListener,但在应用程序启动时,我希望根据数据库中存储的其他用户设置有条件地添加一些电子邮件TraceListener 我目前的解决方案是将web.config作为配置对象打开,并手动修改web.config部分,但我想知道是否有一种方法可以通过编程方式将TraceListener添加到当前配置的LogWriter(或其他)类中C# EntLib日志记录-在运行时添加/编辑TraceListener,c#,.net,logging,enterprise-library,C#,.net,Logging,Enterprise Library,我有一个web应用程序,希望在运行时添加或编辑企业库日志记录。我熟悉如何以编程方式并通过配置文件完全配置EntLib日志记录,但我希望将两者结合使用。我希望通过配置文件设置一些基本TraceListener,但在应用程序启动时,我希望根据数据库中存储的其他用户设置有条件地添加一些电子邮件TraceListener 我目前的解决方案是将web.config作为配置对象打开,并手动修改web.config部分,但我想知道是否有一种方法可以通过编程方式将TraceListener添加到当前配置的Log
有什么建议吗?您需要创建一个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" />
然后运行此示例将生成一封包含日志条目信息以及日志文件trace.log中的条目的电子邮件。要切换过滤器,可以使用LogWriter/Logger类的GetFilter方法检索过滤器,然后对其进行操作。例如,我们的配置中有一个启用日志记录的过滤器。我们可以通过以下方式进行切换:
var filter = Logger.GetFilter<LogEnabledFilter>("<logging enabled filter name>");
filter.Enabled = true; // or false
var filter=Logger.GetFilter(“”);
filter.Enabled=true;//还是假的
希望这有帮助。完美,正是我想要的。Thankso添加侦听器仅在运行时添加,对吗?对于ASP.NET web应用程序,它会在每个用户会话的整个持续时间内工作吗?尝试了此操作,但
Logger.isLoggingEnabled()
始终返回最初加载的值
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);
var filter = Logger.GetFilter<LogEnabledFilter>("<logging enabled filter name>");
filter.Enabled = true; // or false