如何检查是否已设置LogWriter?

时间:2016-07-31 14:13:54

标签: c# logging exception-handling enterprise-library-6

我正在尝试处理从Enterprise Library 4升级到6后最近弹出的Enterprise Library 6 LogWriter异常。

我得到:

  

尚未为Logger静态类设置LogWriter。设置它   调用Logger.SetLogWriter方法。

OR

  

LogWriter已经设置。

......取决于场景。

问题在于它会抛出InvalidOperationException,这似乎太通用了,甚至无法检查

if (Logger.Writer == null)

...也会产生异常,那么如何判断作者是否被设置?

2 个答案:

答案 0 :(得分:3)

根据this CodePlex discussion

  

Enterprise Library的boostrapping行为在版本6中发生了变化。静态Logger外观的影响是您需要设置内部LogWriter(例如在应用程序启动时)

如果您处于Web应用程序场景中,Application_Start()是这样做的好方法:

protected void Application_Start()
{
    Logger.SetLogWriter(new LogWriterFactory().Create());
}

否则,在Main()方法(或其周围的某个地方 - 例如,在容器初始化期间)进行设置。

答案 1 :(得分:1)

感谢您的回答和评论。

我查看了该项目的代码,发现其中没有任何内置支持此功能。

即使该项目已不再开发,我抓住机会并发布了feature request

实现此要求的最佳方案是分支下载并添加进行检查的逻辑并另外定义特定异常(请参阅功能请求):

LogWriterNotSetExceptionLogWriterAlreadySetException

修改

消除分叉,因为这将产生许可影响。尚未转移日志应用程序块的所有权。 Only Unity and Prism have been transferred

根据comment on the notice about the future of Unity,来自P& P& P成员:

  

对于Logging Application Block,我们认为它被取代   语义记录(以前称为语义记录应用程序块或   SLAB)。

     

https://github.com/mspnp/semantic-logging

     

换句话说,我们不打算使用Logging Application   阻止,我们没有计划将其转让给新的所有者。

对于正在尝试新事物的人来说,最好的选择是尝试Semantic Logging