你可以延长TextFormatter
。我认为问题在于TextFormatter
格式化一个LogEntry
:
public override string Format(
LogEntry log
)
因此,您需要将自定义数据放入 LogEntry 中。 (我认为这就是你的问题所要问的。)
另一种(我认为更简单)的方法是使用ExtendedProperties
of LogEntry
。如果您使用异常处理块 (EHAB) 来记录异常,那么您可以将所有自定义信息添加到IDictionary
Data
财产。在运行时,数据字典的内容被添加到ExtendedProperties
。然后可以通过使用格式化程序定义中的标记来记录特定属性。
e.g.
public class MyException : Exception
{
private string myCustomProperty;
public string MyCustomProperty
{
get
{
return myCustomProperty;
}
set
{
myCustomProperty = value;
Data["MyCustomProperty"] = value;
}
}
}
然后您可以使用 EHAB 和日志记录策略来处理异常:
ExceptionPolicy.HandleException(ex, "Logging Exception Handler");
在您的模板中添加如下内容:
我的自定义属性:{keyvalue(MyCustomProperty)}
然后,这将记录您的自定义属性。
如果您不使用 EHAB 那么您可以not在异常类中设置数据值,然后创建小帮助器类以将自定义属性添加到ExtendedProperties
:
public void LogException(Exception ex)
{
LogEntry logEntry = new LogEntry();
//...
logEntry.ExtendedProperties.Add("MyCustomProperty", ex.MyCustomProperty);
Logger.Write(logEntry);
}
如果自定义异常属性的日志记录对您来说是一个普遍问题,那么您可以将所有自定义属性添加到数据字典中,然后在帮助器方法中将所有数据键/值对复制到 ExtendedProperties。