2012-11-08 10 views
15

następującego kodu:Format Kalka wyjście w System.Diagnostics.TraceSource

static void Main(string[] args) 
{ 
    TraceSource ts = new TraceSource("MyApplication"); 

    ts.Switch = new SourceSwitch("MySwitch"); 
    ts.Switch.Level = SourceLevels.All; 

    ts.Listeners.Add(new TextWriterTraceListener(Console.Out)); 

    ts.TraceInformation("Hello World"); 
    Console.ReadKey(); 
} 

generuje następujący wynik:

MyApplication informacyjnym: 0: Hello World

The część "Informacje o mojej aplikacji: 0:" na początku danych wyjściowych śledzenia pochodzi z samej klasy TraceSource.

Potrzebuję jednak znacznika czasu na początku wiersza i chciałbym również zmienić "Informacje" na "Informacje".

Czy istnieje jakiś sposób, aby uzyskać większą swobodę w produkcji śladowe, takie, że można skonfigurować tak, aby być jak:

13:03:00 - MyApplication Info: Hello World

Próbowałem przez kilka godzin, ale bez powodzenia. Cokolwiek robię, na początku linii wyjściowej zawsze jest to stałe, wstępnie zdefiniowane wyjście "MyApplication Information: 0: Hello World".

W dokumentacji MSDN nie podano również żadnych przydatnych informacji.

Odpowiedz

5

Ustawia właściwość TraceOutputOptions w detektorze śledzenia. Format jest wstępnie zdefiniowany, ale można zdecydować się na dodatkowe fragmenty danych zdefiniowane w wyliczeniu TraceOptions.

+1

Wypróbowałem, ale wydaje się nie być rozwiązaniem. Za pomocą TraceOutputOptions mogę tylko określić, które ** dodatkowe ** elementy będą mi potrzebne w moich wynikach. Ale tak naprawdę chcę ** mniej **! ;) – Flagg1980

+7

Utwórz własny detektor śledzenia dziedziczący z modułu nasłuchiwania zapisu tekstu i zastępujący metody formatowania. Zamiast tego użyj tego słuchacza. – fsimonazzi

1

Może trochę za późno, ale jeśli chcesz mieć łatwe i wszechstronne rozwiązanie, powinieneś rzucić okiem na projekt Essentials Diagnostics na CodePlex (dostępny również through NuGet).

Definiuje szeroką gamę słuchaczy (z dozwolonym formatowaniem niestandardowym), które są wyprowadzane na konsolę, toczą się tekst i pliki XML, dzienniki zdarzeń, wiadomości e-mail itp. Oraz są dostarczane z próbkami konfiguracji.

3

TraceSource.TraceInformation kończy wywoływanie TraceListener.TraceEvent na każdym detektorze, który dodaje w nagłówku. Na szczęście metoda TraceListener ma metodę WriteLine, której można użyć do uzyskania niestandardowych wyników.

static void Main(string[] args) 
{ 
    TraceSource ts = new TraceSource("MyApplication"); 

    ts.Switch = new SourceSwitch("MySwitch"); 
    ts.Switch.Level = SourceLevels.All; 

    ts.Listeners.Add(new TextWriterTraceListener(Console.Out)); 

    for (int i = 0; i < ts.Listeners.Count; i++) 
    { 
     var listener = ts.Listeners[i]; 

     listener.WriteLine(
      string.Format("{0} - {1} Info: {2}", 
      DateTime.Now.ToString("HH:mm:ss"), ts.Name, "Hello World")); 
     listener.Flush(); 
    } 
    Console.ReadKey(); 
} 

wyjściowa:

13:52:05 - MyApplication Info: Hello World

4

Jadąc późno też jednak w przypadku cudze ziemie tutaj ...

Podoba mi się to proste. Używam jednej statycznej metody śledzenia w moim App.cs, która wiąże się z pojedynczym TraceSource, który utworzę podczas uruchamiania. Dzięki temu uzyskuję dostęp do całej mojej aplikacji i utrzymuję plik app.config prosty:

public static void Trace(TraceEventType eventType, string message) 
{ 
    if (_TraceSource.Switch.ShouldTrace(eventType)) 
    { 
     string tracemessage = string.Format("{0}\t[{1}]\t{2}", DateTime.Now.ToString("MM/dd/yy HH:mm:ss"), eventType, message); 
     foreach (TraceListener listener in _TraceSource.Listeners) 
     { 
      listener.WriteLine(tracemessage); 
      listener.Flush(); 
     } 
    } 
} 

Moja aplikacja.wpisy konfiguracyjne:

<system.diagnostics> 
    <sources> 
     <source name="mytracesource" switchValue="All"> 
     <listeners> 
      <add name="mytracelistener" 
       type="System.Diagnostics.TextWriterTraceListener" 
       initializeData="trace.log"> 
      </add> 
     </listeners> 
     </source> 
    </sources> 
    </system.diagnostics>