Как добавить (простую) трассировку в C #? [закрыто]


122

Я хочу ввести трассировку в приложение на C #, которое я пишу. К сожалению, я никогда не могу вспомнить, как это работает, и хотел бы, чтобы учебник со справочными материалами проверял время от времени. Он должен включать:

  • App.config / Web.config, добавляемый для регистрации TraceListeners
  • как настроить его в вызывающем приложении

Вы знаете руководство по Uber, на которое мы должны ссылаться?

РЕДАКТИРОВАТЬ: Гленн Славен указал мне в правильном направлении. Добавьте это в свой App.config / Web.config внутри <configuration/>:

<system.diagnostics>
    <trace autoflush="true">
      <listeners>
        <add type="System.Diagnostics.TextWriterTraceListener" name="TextWriter"
             initializeData="trace.log" />
      </listeners>
    </trace>
</system.diagnostics>

Это добавит, TextWriterTraceListenerчто будет ловить все, что вы отправляете, Trace.WriteLineи т. Д.

EDIT: @DanEsparza указал, что вы должны использовать Trace.TraceInformation, Trace.TraceWarningи Trace.TraceErrorвместо того Trace.WriteLine, так как они позволяют вам сообщения в формате точно так же , как string.Format.

Совет: если вы не добавляете никаких слушателей, вы все равно можете увидеть результат трассировки с помощью программы SysInternals DebugView ( Dbgview.exe): http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx


4
Я настоятельно рекомендую использовать Trace.TraceInformationи тому подобное вместо WriteLine. Эти участники позволяют вам форматировать ваши сообщения как string.Format.
Дэн Эспарса

Ответы:



5

Я последовал примерно за 5 разными ответами, а также за всеми сообщениями в блоге выше, и у меня все еще были проблемы. Я пытался добавить слушателя к некоторому существующему коду, который отслеживал с помощью TraceSource.TraceEvent(TraceEventType, Int32, String)метода, в котором TraceSourceобъект был инициализирован строкой, делающей его «именованным источником». Для меня проблема заключалась не в создании допустимой комбинации элементов источника и переключателя для нацеливания на этот источник. Вот пример, который войдет в файл с именем tracelog.txt. Для следующего кода:

TraceSource source = new TraceSource("sourceName");
source.TraceEvent(TraceEventType.Verbose, 1, "Trace message");

Мне удалось войти в систему со следующей конфигурацией диагностики:

  <system.diagnostics>
    <sources>
      <source name="sourceName" switchName="switchName">
        <listeners>
          <add
              name="textWriterTraceListener"
              type="System.Diagnostics.TextWriterTraceListener"
              initializeData="tracelog.txt" />
        </listeners>
      </source>
    </sources>
    <switches>
      <add name="switchName" value="Verbose" />
    </switches>
  </system.diagnostics>

Фрагмент кода не работает.
полезноBee

Извиняюсь, @usefulBee, это не должно было быть фрагментом кода, он был автоматически помечен как код. Это код конфигурации, который будет частью вашего App.config или Web.config, я надеюсь, что это поможет.
Шон

3

У DotNetCoders есть начальная статья об этом: http://www.dotnetcoders.com/web/Articles/ShowArticle.aspx?article=50 , они говорят о том, как настроить переключатели в файле конфигурации и как написать код, но он довольно старый (2002 г.). На CodeProject есть еще одна статья: http://www.codeproject.com/KB/trace/debugtreatise.aspx, но она того же возраста. У CodeGuru есть еще одна статья о кастомных TraceListeners: http://www.codeguru.com/columns/vb/article.php/c5611

Я не могу вспомнить более свежих статей, надеюсь, у кого-то здесь будет что-то


Первая ссылка идет на 404.
Kcoder
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.