Jak dodać (proste) śledzenie w C #? [Zamknięte]


122

Chcę wprowadzić śledzenie do aplikacji C #, którą piszę. Niestety, nigdy naprawdę nie pamiętam, jak to działa i chciałbym, aby od czasu do czasu pojawił się samouczek z cechami referencyjnymi. Powinien zawierać:

  • Elementy App.config / Web.config do dodania w celu rejestracji TraceListeners
  • jak to ustawić w aplikacji wywołującej

Czy znasz samouczek Uber, do którego powinniśmy utworzyć link?

EDYCJA: Glenn Slaven wskazał mi właściwy kierunek. Dodaj to do swojego App.config / Web.config wewnątrz <configuration/>:

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

Spowoduje to dodanie znaku, TextWriterTraceListenerktóry będzie przechwytywał wszystko, na co wysyłasz Trace.WriteLineitp.

EDIT: @DanEsparza wskazał, że należy użyć Trace.TraceInformation, Trace.TraceWarningi Trace.TraceErrorzamiast Trace.WriteLine, ponieważ pozwalają na wiadomości w formacie samo jak string.Format.

Wskazówka: jeśli nie dodasz żadnych odbiorników, nadal możesz zobaczyć dane wyjściowe śledzenia za pomocą programu SysInternals DebugView ( Dbgview.exe): http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx


4
Gorąco polecam używanie Trace.TraceInformationi tym podobnych zamiast WriteLine. Ci członkowie umożliwiają formatowanie wiadomości, takich jak string.Format.
Dan Esparza

Odpowiedzi:



5

Śledziłem około 5 różnych odpowiedzi, a także wszystkie powyższe posty na blogu i nadal miałem problemy. Próbowałem dodać detektor do jakiegoś istniejącego kodu, który był śledzony przy użyciu TraceSource.TraceEvent(TraceEventType, Int32, String)metody, w której TraceSourceobiekt został zainicjowany ciągiem znaków, co czyni go „nazwanym źródłem”. Dla mnie problem nie polegał na utworzeniu prawidłowej kombinacji elementów źródłowych i przełączników w celu kierowania na to źródło. Oto przykład, który będzie logował się do pliku o nazwie tracelog.txt. Dla następującego kodu:

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

Udało mi się zalogować z następującą konfiguracją diagnostyki:

  <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>

Fragment kodu nie działa.
przydatneBee Kwietnia

Przepraszam @usefulBee, to nie miał być fragment kodu, został automatycznie oznaczony jako kod. To jest kod konfiguracyjny, który byłby częścią twojego App.config lub Web.config, mam nadzieję, że to pomoże.
Shaun

3

DotNetCoders ma na ten temat artykuł startowy: http://www.dotnetcoders.com/web/Articles/ShowArticle.aspx?article=50 , mówią o tym, jak ustawić przełączniki w pliku konfiguracyjnym i jak napisać kod, ale jest dość stary (2002). Jest inny artykuł na CodeProject: http://www.codeproject.com/KB/trace/debugtreatise.aspx, ale jest w tym samym wieku. CodeGuru ma inny artykuł o niestandardowych TraceListeners: http://www.codeguru.com/columns/vb/article.php/c5611

Nie przychodzą mi do głowy żadne nowsze artykuły, mam nadzieję, że ktoś inny tutaj coś będzie miał


Pierwsze łącze prowadzi do 404.
Kcoder
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.