【问题标题】:How to check if LogWriter has been set?如何检查是否设置了 LogWriter?
【发布时间】:2016-12-05 17:00:35
【问题描述】:

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

我要么得到:

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

LogWriter 已经设置好了。

...取决于场景。

问题在于它抛出了一个InvalidOperationException,这似乎太笼统而无法处理,甚至使用检查

if (Logger.Writer == null)

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

【问题讨论】:

  • 听起来你应该确保它只设置一次而不是测试属性。为什么这不起作用?
  • this 似乎可以解决您的问题

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


【解决方案1】:

根据this CodePlex discussion

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

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

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

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

【讨论】:

  • 这是要走的路。如果在这里设置一次,是否设置应该没有问题。
  • 感谢您的回答,但它仍然没有回答问题。
【解决方案2】:

感谢您的回答和cmets。

我查看了项目的代码,发现里面没有任何支持这个的东西。

即使该项目不再处于开发阶段,我还是抓住机会发布了feature request

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

LogWriterNotSetExceptionLogWriterAlreadySetException

编辑

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

来自 P & P 成员的comment on the notice about the future of Unity

对于日志记录应用程序块,我们认为它被 语义记录(以前的语义记录应用程序块或 板)。

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

换句话说,我们不打算在日志记录应用程序上工作 阻止,我们没有计划将其转让给新所有者。

所以对于任何从事新事物的人来说,最好的选择就是尝试Semantic Logging

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2021-12-20
    • 1970-01-01
    相关资源
    最近更新 更多