Добавить метку времени в Trace.WriteLine ()

В моем приложении C # .NET у меня проблема с методом Trace.WriteLine (). Я часто использую этот метод и хочу добавлять TimeStamp каждый раз, когда использую его.

Вместо Trace.WriteLine (DateTime.Now + «Что-то не так!») Есть ли решение, в котором DateTime установлен по умолчанию?


person Community    schedule 14.05.2009    source источник
comment
Вы можете использовать базовую диагностику только вот так   -  person Eugene Ryabtsev    schedule 06.07.2012


Ответы (6)


Просто напишите свой собственный метод "TraceLine(string msg)" и начните его вызывать:

void TraceLine(string msg, bool OmitDate)
{
    if (!OmitDate)
        msg = DateTime.Now + " " + msg;
    Trace.WriteLine(msg);
}

void TraceLine(string msg) {TraceLine(msg, false);}
person Joel Coehoorn    schedule 14.05.2009
comment
Это должны быть статические методы, поскольку они не зависят от вызывающего их объекта. - person JDunkerley; 14.05.2009
comment
Я бы предложил вести журнал с отметками времени в формате UTC, чтобы избежать двусмысленности в часовых поясах и т. Д. - также вы можете использовать Format или StringBuilder, чтобы избежать всех этих временных строк - person morechilli; 14.05.2009
comment
на самом деле, наиболее эффективным методом конкатенации строк, вероятно, является string.Concat (). В любом случае это не имело бы значения. - person DonkeyMaster; 14.05.2009

Через код

Вы можете настроить перечисление флагов TraceOutputOptions.

var listener = new ConsoleTraceListener() { TraceOutputOptions = TraceOptions.Timestamp | TraceOptions.Callstack };
Trace.Listeners.Add(listener);

Trace.TraceInformation("hello world");

Это не работает для Write и WriteLine, вы должны использовать методы TraceXXX.

Через app.config

Это также можно настроить в вашем App.config с несколько эквивалентом и с помощью TraceSource:

<configuration>
  <system.diagnostics>
    <trace autoflush="true">
      <sources>
        <source name="TraceSourceApp">
          <listeners>
            <add name="myListener" type="System.Diagnostics.ConsoleTraceListener" traceOutputOptions="Timestamp" />
          </listeners>
        </source>
      </sources>
    </trace>
  </system.diagnostics>
</configuration>

А в коде вы можете:

private static TraceSource mySource =   
        new TraceSource("TraceSourceApp");
static void Main(string[] args)
{
  mySource.TraceInformation("hello world");
}
person user38309    schedule 15.05.2009
comment
Эквивалент файла конфигурации: traceOutputOptions = DateTime, Timestamp для тега system.diagnostics / sources / listeners / add. Сохраните http://msdn.microsoft.com/en-us/library/a10k7w6c(v=vs.110).aspx, и это упоминается в одном из других ответов здесь. Каким-то образом я увидел ответ MSDN один за другим. - person Mayyit; 26.11.2013
comment
Обратите внимание, что параметры вывода трассировки не применяются к Trace.WriteLine, а только к методам Trace.TraceInformation / Trace.Trace *. - person Curtis Yallop; 12.11.2014

Вы можете настроить app.config файл на использование метки времени (относительного и текущего времени) для всех прослушивателей трассировки, используя traceOutputOptions

traceOutputOptions = "DateTime, Timestamp";
person johara56    schedule 01.09.2011
comment
Согласно одному из наиболее популярных ответов, это эффективно только при использовании методов TraceXXX. - person Mayyit; 26.11.2013
comment
Это подход при использовании прослушивателей трассировки ‹listeners› ‹add name = fileTrace traceOutputOptions = DateTime, Timestamp type = System.Diagnostics.TextWriterTraceListener initializeData = trace.log /› ‹remove name = Default /› ‹/listeners› - person ozkary; 01.12.2016

Вы можете написать метод-оболочку, который это сделает:

public static void DoTrace(string message)
{
    DoTrace(message,true);
}

public static void DoTrace(string message, bool includeDate)
{
    if (includeDate) {
        Trace.WriteLine(DateTime.Now + ": " + message);
    } else {
        Trace.WriteLine(message);
    }
}
person Lloyd    schedule 14.05.2009
comment
Это не сработает, потому что DoTrace статичен и у вас нет доступа к Trace. Вы можете использовать HttpContext.Current.Trace.WriteLine (DateTime.Now +: + message) - person Darin Dimitrov; 14.05.2009
comment
Разве System.Diagnostics.Trace.WriteLine () не статичен? Зависит от того, что он использует, я думаю: / - person Lloyd; 14.05.2009

Мы используем log4net TraceAppender, где вы можете легко настроить макет или фильтрацию.

person treehouse    schedule 14.05.2009

Вы можете написать свой собственный TextWriterTraceListener, как упоминалось здесь.

person tm1    schedule 27.06.2011