2013-09-25 9 views
7

Chciałbym móc zadeklarować EventSource, który ma minimum kilka metod, które domyślnie zapewniają regularne funkcje logowania.Czy można podklasować EventSource w ETW?

np.

  • informacji()
  • Informuj()
  • Błąd()

Ponadto chciałbym, aby móc w ciągu każdej usługi, określenie konkretnego źródła zdarzenia, który dziedziczy z klasa bazowa zapewniająca powyższe. W tej chwili aplikacja EventRegister.exe, która tworzy manifest, skarży się, że źródło zdarzenia musi zostać zapieczętowane.

Czy robię to źle? Jeśli tak, jak mogę to osiągnąć? Zobacz przykładowy kod:

public class ETWBase : EventSource 
    { 
     [Event(1, Channel = EventChannel.Admin, Message = "Info Message: {0}")] 
     public void Info(string message) { this.WriteEvent(1); } 

     [Event(2, Channel = EventChannel.Debug, Message = "Debug Message: {0}")] 
     public void Trace(string message) { this.WriteEvent(2); } 

    } 

    [EventSource(Name = "ABC-MyEtwServiceEventSource")] 
    public sealed class MyEtwServiceEventSource : ETWBase 
    { 
     public static MyEtwServiceEventSource Log = new MyEtwServiceEventSource(); 

     [Event(3, Channel = EventChannel.Debug, Message = "My specific Message: {0}")] 
     public void Trace(string message) { this.WriteEvent(3); }  
    } 

Używam najnowsze i najlepsze Microsoft.Diagnostics.Tracing (pre) co rozumiem posiada wsparcie dla kanałów przeciwieństwie płyty z Enterprise Library.

+1

Microsoft.Diagnostics.Tracing (pre) oczekuje, że klasa zostanie zapieczętowana. Klasa dziedzicząca EventSource musi zostać zapieczętowana, nie będzie można wygenerować manifestu, jeśli nie oznaczysz go jako zapieczętowanego. Wątpię, czy to zadziała. – KRP

+0

Jak mogę udostępnić wspólne metody dla wielu źródeł zdarzeń w szerokim systemie? – jaffa

+0

Nie jestem pewien na tym froncie, myślę, że nie możemy tego zrobić. – KRP

Odpowiedz

3

ETWBase powinna być abstrakcyjna i nie powinna mieć metod dekorowanych przez EventAttribute.

Więcej informacji można znaleźć w pliku dokumentacji _EventSourceUsersGuide.docx dodawanym do projektu, jeśli odwołujesz się do pakietów nuget Event Source lub Event Source Samples.

Powiązane problemy