Вы можете продлить TextFormatter
. Я думаю, что проблема в том, что TextFormatter
форматирует LogEntry
:
public override string Format(
LogEntry log
)
Так что вам нужно получить ваши пользовательские данные в LogEntry. (Что я думаю, это то, что ваш вопрос задает.)
Альтернативный (и я думаю, более простой) подход заключается в использовании ExtendedProperties
из LogEntry
. Если вы используете блок обработки исключений (EHAB) для регистрации своего исключения, вы можете добавить всю свою пользовательскую информацию в свойство IDictionary
Data
. Во время выполнения содержимое словаря данных добавляется в ExtendedProperties
. Определенные свойства могут быть зарегистрированы с помощью токенов в определении форматера.
, например * * 1016
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);
}
Если регистрация свойств настраиваемых исключений является для вас общей проблемой, то вы можете добавить все свои настраиваемые свойства в словарь данных, а затем скопировать все пары ключ / значение данных в ExtendedProperties, используя вспомогательный метод.