Enterprise Library 5.0 - Добавление пользовательских токенов в TextFormatter - PullRequest
2 голосов
/ 21 апреля 2011

Я создал специальное исключение, в котором есть данные, относящиеся к нашему приложению. Я хочу убедиться, что эти данные регистрируются, когда генерируется исключение и регистрируется в журнале событий.

Я попытался создать пользовательский TextFormatter, который вызывается, но я не уверен, как получить доступ к текущему исключению, чтобы я мог добавить нашу пользовательскую информацию в запись журнала.

Есть кое-что, чего я не понимаю, и был бы признателен за помощь в добавлении пользовательских токенов (и данных) в TextFormatters Enterprise Library 5.0.

Спасибо, ... Marc

Ответы [ 2 ]

2 голосов
/ 22 апреля 2011

Вы можете продлить 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, используя вспомогательный метод.

1 голос
/ 22 апреля 2011

Lab2 из Extensibility Hands-On Labs предоставляет пошаговые инструкции по созданию пользовательских tracelistener и форматеров текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...