TextWriterTraceListener записывает app filename.exe в начале каждой строки - PullRequest
0 голосов
/ 21 октября 2011

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

  LoggingExperiments.exe Information: 0 : 13:11 Testing infos
  LoggingExperiments.exe Error: 0 : 13:11   Testing errors

Вот код:

class CustomTextWriterTraceListener : TextWriterTraceListener
{
    public CustomTextWriterTraceListener(string file) : base(file) 
    {            
    }        

    public override void WriteLine(string message)
    {            
        base.Write(DateTime.Now.ToShortTimeString());
        base.Write("\t");
        base.WriteLine(message); // #1
        Writer.WriteLine(message); // #2
    }
}

Как отформатировать вывод, чтобы в каждой строке не было ведущих имен исполняемых файлов? Или изменить порядок регистрации информации?

Должен ли я всегда вызывать "Writer.WriteLine" и форматировать его параметры (комментарий # 2) или есть какой-то другой способ переопределить это поведение и остаться с вызовом базовых методов, как в коде, помеченном как # 1.

1 Ответ

1 голос
/ 21 октября 2011

Не могу воспроизвести ваше поведение ... Я пробовал этот код:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Collections;

namespace TraceExample
{
    class Program
    {
        static void Main(string[] args)
        {
            CustomTraceListener c = new CustomTraceListener("log.txt");
            Trace.Listeners.Add(c);
            Trace.WriteLine("WriteLine","Info");
            Trace.Flush();
        }
    }

    public class CustomTraceListener : TextWriterTraceListener
    {
        public CustomTraceListener(string file) : base(file){}    
        public override void WriteLine(string message)
        {
            base.Write(DateTime.Now.ToShortTimeString());
            base.Write("\t");
            base.WriteLine(message); // #1
            Writer.WriteLine(message); // #2
        }
    }
}

И вывод:

Вы можете сделать в файле конфигурации:

17.02   Info: WriteLine
Info: WriteLine



<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="consoleListener"
          type="System.Diagnostics.ConsoleTraceListener" 
          traceOutputOptions="ProcessId, DateTime" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

Взгляните на traceOutputOptions

Здесь ссылка на MSDN

...