您可以扩展TextFormatter。我认为问题在于TextFormatter 格式化LogEntry:
public override string Format(
LogEntry log
)
因此,您需要将自定义数据放入 LogEntry。 (我认为这就是您的问题所在。)
另一种(我认为更简单)的方法是使用ExtendedProperties 的LogEntry。如果您使用异常处理块 (EHAB) 记录异常,则可以将所有自定义信息添加到 IDictionary Data 属性。在运行时,数据字典的内容被添加到ExtendedProperties。然后可以使用格式化程序定义中的标记来记录特定属性。
例如
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");
在您的模板中添加如下内容:
MyCustomProperty: {keyvalue(MyCustomProperty)}
这将记录您的自定义属性。
如果您没有使用 EHAB,那么您可以不在您的异常类中设置 Data 值,然后创建小型帮助程序类以将您的自定义属性添加到 ExtendedProperties:
public void LogException(Exception ex)
{
LogEntry logEntry = new LogEntry();
//...
logEntry.ExtendedProperties.Add("MyCustomProperty", ex.MyCustomProperty);
Logger.Write(logEntry);
}
如果自定义异常属性的日志记录对您来说是一个普遍问题,那么您可以将所有自定义属性添加到 Data 字典中,然后在辅助方法中将所有 Data 键/值对复制到 ExtendedProperties。