【问题标题】:Enterprise Library Logging Extended Properties Fails on Server服务器上的企业库日志记录扩展属性失败
【发布时间】:2012-05-27 19:32:01
【问题描述】:

我有一个标准的企业库文本格式化程序,具有默认格式。日志文件已正确创建,但仍为空。如果我删除最后一个格式化选项,使用扩展属性(见下文)它开始工作。如果我把它放回去,日志仍然是空的,我不知道在哪里搜索错误。

template="Tim...
Extended Properties: {dictionary({key} - {value}{newline})}"

(是的,我可以使用确切的缩写模板运行它来触发错误)。如果我删除 {dictionary({key} - {value}{newline})} 部分,它将开始记录。该问题仅发生在测试服务器上,在我的本地开发机器上它按预期工作,输出我的扩展属性。

我尝试设置单独的日志记录错误目标,但没有成功。那里没有任何记录。

【问题讨论】:

  • LogEntry 的 ExtendedProperties 字典是否包含任何内容?该字典中的对象是否可能为空或在 ToString() 中引发异常?如果您将“记录错误和警告”类别配置为在某处记录,您应该能够看到记录时发生的任何错误。
  • 我在 ExtendedProperties 中包含了源文件和行号信息。在测试机器上,调试信息文件丢失 - 给出空值。如果您发表评论作为答案,我会接受。

标签: .net enterprise-library enterprise-library-5


【解决方案1】:

我认为@TimB 可能是对的。

有一个open issue与此相关:“之所以没有报告原始异常,是因为在报告异常时使用了另一个TextFormatter并抛出了另一个异常,该异常被捕获并吞下(尽管日志记录失败事件被触发)。”

解决方法是不在 ExtendedProperties 中填充空值。或者可能是自定义格式化程序。

【讨论】:

    【解决方案2】:

    ExtendedProperties 字典不能包含空值。这会导致日志记录失败,因为 Enterprise Library 不希望此字典中有空对象。要诊断这是否是您的问题,您将“记录错误和警告”类别配置为在某处记录,然后您应该能够看到记录时发生的任何错误。

    【讨论】:

      【解决方案3】:

      我遇到的另一个导致缺少扩展属性的问题是Logger.Write 的某些重载不将该对象视为异常,因此不记录扩展属性。

      一个选项是将 exception.Data 转换为 Dictionary 并将其作为第三个 properties 参数传递。

      第二个选项是使用ExceptionPolicy.HandleException 记录异常(假设您的异常策略将异常发送到适当的日志类别)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-27
        相关资源
        最近更新 更多