Как я могу изменить формат вывода TextWriterTraceListener? - PullRequest
0 голосов
/ 02 февраля 2010

реализация по умолчанию отображает вывод как '::', теперь я не хочу этот формат, я хочу обрезать имя источника и даже код, потому что он для меня совершенно бесполезен Есть ли простой способ, которым я могу это сделать?

Мой текущий обходной путь - извлечь из TextWriterTraceListener и переопределить метод TrackEvent. используйте рефлектор для копирования реализации по умолчанию и просто удалите вызов функции writerHeader.

1 Ответ

0 голосов
/ 02 мая 2013

вы можете создать производный класс из TextWriterTraceListener и переопределить TraceEvent для изменения формата вывода. Было бы лучше переопределить все методы TraceEvent. например,

class TextWriterTraceListenerCustomOutput:TextWriterTraceListener
{
    public TextWriterTraceListenerCustomOutput(string fileName):base(fileName)
    {
    }

    public override void Write(string message)
    {
        base.Write(String.Format("[{0}]:{1}",DateTime.Now,message));
    }

    public override void WriteLine(string message)
    {
        base.WriteLine(String.Format("[{0}]:{1}", DateTime.Now, message));
    }

    public override void TraceEvent(TraceEventCache eventCache, string source, TraceEventType eventType, int id, string message)
    {
        //base.TraceEvent(eventCache, source, eventType, id, message);
        if(String.IsNullOrEmpty(message)) return;
        WriteLine(String.Format("{0}:{1}:{2}:{3}",source, eventType,Enum.GetName(typeof(LogId),id),message.Replace("\r",string.Empty).Replace("\n",string.Empty)));
    }
}
...