Enterprise Library 5.0 - 将自定义标记添加到TextFormatter

时间:2011-04-21 13:55:57

标签: logging exception-handling enterprise-library

我创建了一个自定义异常,其中包含与我们的应用程序相关的数据。我想确保在抛出异常并记录到事件日志时记录此数据。

我尝试创建一个正在调用的自定义TextFormatter,但我不确定如何访问当前异常,因此我可以将自定义信息添加到日志条目中。

有一些我不理解的内容,并希望在向Enterprise Library 5.0 TextFormatters添加自定义令牌(和数据)方面提供帮助。

谢谢, ...马克

2 个答案:

答案 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和文本格式化程序的分步指导。