11

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

我要么得到:

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

或者

LogWriter 已经设置好了。

……视情况而定。

问题是它抛出了一个InvalidOperationException似乎太通用而无法处理的问题,甚至检查使用

if (Logger.Writer == null)

...也会产生一个异常,那么如何检查作者是否已设置?

4

2 回答 2

5

根据这个 CodePlex 讨论

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

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

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

否则,在Main()方法中进行设置(或者在它周围的某个地方——比如说,在容器初始化期间)。

于 2016-08-04T11:43:34.487 回答
1

感谢您的回答和评论。

我查看了该项目的代码,发现其中没有内置任何东西支持这一点。

即使该项目不再处于开发阶段,我还是抓住机会发布了一个功能请求

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

LogWriterNotSetExceptionLogWriterAlreadySetException

编辑

剔除分叉,因为这会产生许可影响。日志记录应用程序块的所有权尚未转移。只有 Unity 和 Prism 已被转移

根据P&P 成员对 Unity 未来通知的评论:

对于 Logging Application Block,我们认为它被 Semantic Logging(以前的 Semantic Logging Application Block 或 SLAB)所取代。

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

换句话说,我们不打算在 Logging Application Block 上工作,我们也没有计划将其转让给新的所有者。

因此,对于任何从事新事物的人来说,最好的选择是尝试语义记录

于 2016-08-09T20:04:00.090 回答