我有一个标准的企业库文本格式化程序,使用默认格式。日志文件已正确创建,但仍为空。如果我删除最后一个格式化选项,使用扩展属性(见下文),它将开始工作。如果我把它放回去,日志仍然是空的,我不知道在哪里搜索错误。
template="Tim...
Extended Properties: {dictionary({key} - {value}{newline})}"
(是的,我可以使用那个确切的缩写模板运行它来触发错误)。如果我删除了{dictionary({key} - {value}{newline})}
部分,则会开始记录。问题只发生在测试服务器上,在我的本地开发机上它按预期工作,输出我的扩展属性。
我已尝试设置单独的日志记录错误目标,但没有运气。没有记录在那里。
答案 0 :(得分:1)
我认为@TimB可能是正确的。
有一个open issue与此相关:“未报告原始异常的原因是,在报告异常时,使用另一个TextFormatter并抛出另一个被捕获和吞噬的异常(尽管触发了日志记录失败事件。“
解决方法是不在ExtendedProperties中填充空值。或者也许是自定义格式化程序。
答案 1 :(得分:0)
ExtendedProperties字典不得包含空值。这会导致日志记录失败,因为Enterprise Library不希望此字典中出现空对象。要诊断这是否是您的问题,请配置'记录错误&警告的类别要记录到某处,然后您应该能够看到记录时发生的任何错误。
答案 2 :(得分:0)
我遇到的另一个导致缺少扩展属性的问题是Logger.Write
的某些重载不会将对象视为异常,因此也不会记录扩展属性。
一个选项是将异常强制转换为数据,并将其作为第三个properties
参数传递给字典。
第二个选项是使用ExceptionPolicy.HandleException
记录异常(假设您的异常策略将异常发送到适当的日志类别)。