Как включить удобную временную метку в трассировку - PullRequest
9 голосов
/ 31 января 2011

Я пытаюсь понять разницу между Trace.Write против Trace.TraceInformation и какой из них следует использовать.

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

ConsoleApplication1.exe Information: 0 : Hello  - Trace!  
DateTime=2011-01-31T14:26:11.1538509Z  
ConsoleApplication1.exe Error: 0 : Hello  - Trace!  
DateTime=2011-01-31T14:26:11.1538509Z  

Все, что мне нужно, это что-то вроде

2011-01-31 11:32 Information: Hello - Trace!  
2011-01-31 11:33 Error: Hello - Trace!

Есть ли простой способ настроить это в App.config, делая это?

Ответы [ 2 ]

10 голосов
/ 19 августа 2013

Я нашел лучший подход, без необходимости какой-либо внешней зависимости (я думаю, что включенные функции System.Diagnostics уже богаты)

Я унаследовал двух нужных мне слушателей (ConsoleTraceListener и TextWriterTraceListener) следующим образом:

namespace MyApp
{
    namespace Diagnostics
    {
        public class DateTimeConsoleTraceListener : ConsoleTraceListener
        {
            public override void Write(string message)
            {
                base.Write(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fffffff ") + message);
            }
        }

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

            public override void Write(string message)
            {
                base.Write(DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss.fffffff ") + message);
            }
        }
    }
}

Затем в App.config:

<sharedListeners>
  <add name="ConsoleListener"
  type="MyApp.Diagnostics.DateTimeConsoleTraceListener, MyApp">
    <filter type="System.Diagnostics.EventTypeFilter"
      initializeData="All"/>
  </add>
  <add name="FileListener"
    type="MyApp.Diagnostics.DateTimeTextWriterTraceListener, MyApp"
    initializeData="MyApp.log" >
    <filter type="System.Diagnostics.EventTypeFilter"
      initializeData="All"/>
  </add>
</sharedListeners>

Надеюсь, это поможет!

1 голос
/ 02 февраля 2011

Взгляните на проект Ukadc.Diagnostics на codeplex.Он предоставляет хороший пакет дополнений на основе System.Diagnostics, который обеспечивает более мощные возможности форматирования вывода (аналогично log4net и NLog), чем это может быть достигнуто с помощью встроенных System.Diagnostics TraceListeners.Вы даже можете написать свои собственные объекты форматирования / токена и включить их в процесс форматирования вывода.

Библиотека проста в использовании и работает довольно хорошо.

...