2016-07-31 105 views
8

我想处理一个企业库6日志写例外,最近突然出现了从企业库升级后4至6如何检查LogWriter是否已设置?

我要么得到:

的写进程尚未设置为记录仪静态类。调用Logger.SetLogWriter方法将其设置为 。

OR

的写进程已经设置。

...取决于场景。

的问题是,它抛出一个InvalidOperationException这似乎过于笼统来处理,而且即使使用

if (Logger.Writer == null) 

检查......也产生了一个异常,那么怎么会一个接着检查作家是否设置?

+0

听起来像是你应该确保它被设置的恰好一次测试,而不是财产。为什么这不起作用? – usr

+0

[this](https://entlib.codeplex.com/discussions/442089)似乎处理您的问题 – lokusking

回答

1

感谢您的回答和评论。

我已经浏览了项目的代码,发现没有内置任何内容支持这一点。

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

来实现这一要求会 被分叉下载它和添加,做了检查逻辑,并且另外定义特定异常(见特征请求)

最佳情形:

LogWriterNotSetExceptionLogWriterAlreadySetException

EDIT

撬出分支,因为这会产生许可影响。记录应用程序块的所有权尚未转移。 Only Unity and Prism have been transferred

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

对于记录应用程序块,我们认为通过 语义记录(原记录的语义应用程序块或 SLAB)所取代。

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

换句话说,我们不打算对测井中的应用 座工作,我们没有计划将其转让给新的业主。

对于任何新的东西,工作,所以最好的办法是尝试Semantic Logging

2

this CodePlex discussion

企业图书馆的boostrapping行为版本6.静态记录仪正面的影响已经改变的是你需要设置内部LogWriter(例如,在应用程序启动)

如果您在Web应用场景是,Application_Start()是这样做的好办法:

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

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

+0

这是要走的路。如果你在这里设置一次,那么它是否被设置是没有问题的。 – Sinaesthetic

+0

感谢您的回答,但它仍然不回答这个问题。 – user919426