private TraceSource m_tracesource;
...m_tracesource= new TraceSource("sourcename");
Ważna jest nazwa źródła (w powyższym przykładzie: sourcename), która jest przekazywana do konstruktora obiektu TraceSource. Ta nazwa będzie wykorzystywana później w pliku konfiguracyjnym aplikacji, a by zlokalizować źródło z którego zdarzeniami jesteśmy zainteresowani. Kolejnym krokiem jest użycie funkcji TraceEvent, w każdym miejscu programu, gdzie występuje jakieś interesujące zdarzenie. Przykład takiego wykorzystania znajduje się poniżej:m_tracesource.TraceEvent(type, id, message);
Tutaj warte komentarza są następujące sprawy:- type - to typ zdarzenia (według enumeracji TraceEventType), omówiony w poprzedniej części artykułu.
- id - to numeryczny identyfikator przypisany przez programistę aplikacji (czyli przez nas) do tego z darzenia
- message - wiadomość, którą chcemy przekazać użytkownikowi
Teraz przed nami najciekawszy moment, konfiguracja logowania w pliku konfiguracyjnym aplikacji. Wszystkie wpisy odnośnie ustawień logowania lub śledzenia zdarzeń opartego o mechanizm, który tutaj opisuję powinny się znaleźć w pliku konfiguracyjnym wewnątrz tagu "system.diagnostic":
<system.diagnostics><!-- ... other definitions place here... -->
</system.diagnostics>
Wewnątrz tagu "system.diagnostic" powinny się znaleźć następujące elementy:- sources - czyli ustawienia odnośnie źródeł, z których zdarzeniami jesteśmy zainteresowani i dla których definiujemy "listeners", czyli do jakiego listenera mają trafiać informacje z tego źródła
- switches - tutaj definiujemy jakim poziomem logowania jesteśmy zainteresowaniu z danego źródła (czy mają to być błędy (errors), ostrzeżenia (warnings), itp...), informacje na temat konfiguracji switch'y można znaleźć w MDSN'nie.
- sharedListeners - tuaj umieszczamy definicje listener'ów, które zamieżamy wykorzystywać. Oprócz nazw i typu danego listener'a konfiugurujemy też inne elementy charakterystyczne dla danego typu Listener'a, np.: nazwę pliku, do którego mają trafić informacje o zdarzeniach.
<sources>
<source name="MySource1" switchName="MySource" switchType="System.Diagnostics.SourceSwitch" gt;
<listeners><add name="LogFile"/>
<add name="myEventLogTraceListener"/></listeners>
</source></sources>
W tym przykładzie dodano źródło "MySource1", z którego chcemy odczytywać zdarzenia. Oczywiście takie źródło musi być wykorzystane w aplikacji, abyśmy jakiekolwiek zdarzenia otrzymali. Dla tego źródła ustawiono, że switch o nazwie "MySource" ustawi poziom logowania. Dodatkowo do źródła został dodany szereg listenerów, do których będą trafiały zdarzenia. Przykładowa definicja (wykorzystanego wcześniej) switch'a znajduje się tutaj:
<switches>
<add name="MySource" value="All" />
</switches> W tym przypadku zdefiniowany switch ustawił poziom logowania na: "All", czyli interesują nas wszystkie zdarzenia. Kolejnym krokiem jest skonfigurowanie wykorzystanych Listener'ów, czyli sekcja sharedListeners:<sharedListeners>
<add name="myEventLogTraceListener" type="System.Diagnostics.EventLogTraceListener" initializeData="TraceListenerLog" />
<add name="LogFile" type="System.Diagnostics.DelimitedListTraceListener" initializeData="Application_Main.log" traceOutputOptions="DateTime"><filter type="System.Diagnostics.EventTypeFilter" initializeData="Warning" />
</add>
</sharedListeners>
Tutaj zostały skonfigurowane dwa listenery:- myEventLogTraceListener, który wykorzystuje klasę EventLogTraceListner, z której zdarzenia będą trafiać do logu aplikacji systemu Windows, a źródłem zdarzenia (wpisanym do logu) będzie TraceListenerLog
- LogFile, wykorzystujący DelimitedListTraceListener, który zdarzenia będzie wpisywał do pliku o nazwie "Application_Main.log", wpisy będą oddzielane średnikami i będą zawierały datę i czas zdarzenia. Dodatkowo dla tego Listener'a ustawiony został filtr, który będzie powodował, że trafiające tutaj zdarzenia, będą przynajmniej ostrzeżeniami (warnings).
Brak komentarzy:
Prześlij komentarz