我创建了一个自定义异常,其中包含与我们的应用程序相关的数据。我想确保在抛出异常并记录到事件日志时记录此数据。
我尝试创建一个正在调用的自定义TextFormatter,但我不确定如何访问当前异常,因此我可以将自定义信息添加到日志条目中。
有一些我不理解的内容,并希望在向Enterprise Library 5.0 TextFormatters添加自定义令牌(和数据)方面提供帮助。
谢谢, ...马克
答案 0 :(得分:2)
您可以延长TextFormatter
。我认为问题在于TextFormatter
格式为LogEntry
:
public override string Format(
LogEntry log
)
因此,您需要将自定义数据导入LogEntry。 (我认为这是你的问题。)
另一种(我认为更简单)方法是使用ExtendedProperties
的{{1}}。如果您使用异常处理阻止(EHAB)来记录您的异常,那么您可以将所有自定义信息添加到LogEntry
IDictionary
属性。在运行时,数据字典的内容将添加到Data
。然后可以使用格式化程序定义中的标记记录特定属性。
e.g。
ExtendedProperties
然后,您可以使用带有日志记录策略的EHAB来处理异常:
public class MyException : Exception
{
private string myCustomProperty;
public string MyCustomProperty
{
get
{
return myCustomProperty;
}
set
{
myCustomProperty = value;
Data["MyCustomProperty"] = value;
}
}
}
在您的模板中添加以下内容:
MyCustomProperty:{keyvalue(MyCustomProperty)}
然后会记录您的自定义属性。
如果您没有使用EHAB,那么您可以不在您的异常类中设置数据值,然后创建小辅助类以将您的自定义属性添加到ExceptionPolicy.HandleException(ex, "Logging Exception Handler");
:
ExtendedProperties
如果自定义异常属性的记录是一个普遍的问题,那么您可以将所有自定义属性添加到数据字典,然后在帮助方法中将所有数据键/值对复制到ExtendedProperties。
答案 1 :(得分:1)
Extensibility Hands-On Labs的Lab2提供了有关构建自定义tracelistener和文本格式化程序的分步指导。