Пользовательская реализация прослушивателя трассировки. Write и WriteLine проблемное поведение - PullRequest
4 голосов
/ 27 августа 2009

Я хочу реализовать пользовательский прослушиватель трассировки следующим образом:

public class TraceListener : System.Diagnostics.TraceListener
{

    public override void Write(string message)
    {
      LogToDatabase(message);
    }

    public override void WriteLine(string message)
    {
      LogToDatabase(message);
    }
}

Теперь предположим, что где-то в коде произошла ошибка. В блоке catch я хочу сделать

Trace.TraceError(ex.ToString()) 

где ex пойман исключение. Теперь проблема в том, что в моем MyTraceListener параметры сообщения метода Write и метода WriteLine различаются. И что еще интереснее, строка, сгенерированная ex.ToString (), передается как параметр в методе WriteLine, а не в Write.

1 Ответ

4 голосов
/ 27 августа 2009

Фактически метод Trace.TraceError () вызывает два метода: сначала он выполняет Write () для печати / записи источника ошибки вместе с кодом ошибки и метод WriteLine () для печати / записи описания ошибки.

PS: перед добавлением экземпляра пользовательского TraceListener используйте метод Clear (), чтобы удалить экземпляр прослушивателя трассировки по умолчанию.

...