Wskazówki: filtrowanie danych wyjściowych My.Application.Log (Visual Basic)

W tym przewodniku pokazano, jak zmienić domyślne filtrowanie dziennika dla My.Application.Log obiektu, aby kontrolować, jakie informacje są przekazywane z Log obiektu do odbiorników i jakie informacje są zapisywane przez odbiorniki. Zachowanie rejestrowania można zmienić nawet po utworzeniu aplikacji, ponieważ informacje o konfiguracji są przechowywane w pliku konfiguracji aplikacji.

Wprowadzenie

Każdy komunikat, który My.Application.Log zapisuje, ma skojarzony poziom ważności, który mechanizm filtrowania służy do kontrolowania danych wyjściowych dziennika. Ta przykładowa aplikacja używa My.Application.Log metod do zapisywania kilku komunikatów dziennika o różnych poziomach ważności.

Aby skompilować przykładową aplikację

  1. Otwórz nowy projekt aplikacji systemu Windows w języku Visual Basic.

  2. Dodaj przycisk o nazwie Button1 do formularza Form1.

  3. W procedurze obsługi zdarzeń Click dla przycisku Button1 dodaj następujący kod:

    ' Activity tracing information
    My.Application.Log.WriteEntry("Entering Button1_Click", TraceEventType.Start)
    
    ' Tracing information
    My.Application.Log.WriteEntry("In Button1_Click", TraceEventType.Information)
    
    ' Create an exception to log.
    Dim ex As New ApplicationException
    ' Exception information
    My.Application.Log.WriteException(ex)
    
    ' Activity tracing information
    My.Application.Log.WriteEntry("Leaving Button1_Click", TraceEventType.Stop)
    
  4. Uruchom aplikację w debugerze.

  5. Naciśnij przycisk1.

    Aplikacja zapisuje następujące informacje w pliku wyjściowym debugowania i pliku dziennika aplikacji.

    DefaultSource Information: 0 : In Button1_Click

    DefaultSource Error: 2 : Error in the application.

  6. Zamknij aplikację.

    Aby uzyskać informacje na temat wyświetlania okna danych wyjściowych debugowania aplikacji, zobacz Okno danych wyjściowych. Aby uzyskać informacje na temat lokalizacji pliku dziennika aplikacji, zobacz Przewodnik: określanie miejsca zapisywania informacji o pliku My.Application.Log.

    Uwaga

    Domyślnie aplikacja opróżnia dane wyjściowe pliku dziennika po zamknięciu aplikacji.

    W powyższym przykładzie drugie wywołanie WriteEntry metody i wywołanie WriteException metody generuje dane wyjściowe dziennika, podczas gdy pierwsze i ostatnie wywołania WriteEntry metody nie. Jest to spowodowane tym, że poziomy WriteEntry ważności i WriteException są "Informacje" i "Błąd", z których oba są dozwolone przez My.Application.Log domyślne filtrowanie dziennika obiektu. Jednak zdarzenia z poziomami ważności "Start" i "Stop" nie mogą tworzyć danych wyjściowych dziennika.

Filtrowanie dla wszystkich odbiorników My.Application.Log

Obiekt My.Application.Log używa SourceSwitch nazwy DefaultSwitch do kontrolowania, które komunikaty są przekazywane z WriteEntry metod i WriteException do odbiorników dziennika. Możesz skonfigurować DefaultSwitch w pliku konfiguracji aplikacji, ustawiając jej wartość na jedną z SourceLevels wartości wyliczenia. Domyślnie jej wartość to "Informacje".

W tej tabeli przedstawiono poziom ważności wymagany dla dziennika w celu zapisania komunikatu do odbiorników, biorąc pod uwagę określone DefaultSwitch ustawienie.

Wartość przełącznika domyślnego Ważność komunikatu wymagana dla danych wyjściowych
Critical Critical
Error Critical lub Error
Warning Critical, Error lub Warning
Information Critical, Error, lub WarningInformation
Verbose Critical, , Error, Warning, Informationlub Verbose
ActivityTracing Start, , Stop, Suspend, Resumelub Transfer
All Wszystkie komunikaty są dozwolone.
Off Wszystkie komunikaty są blokowane.

Uwaga

Metody WriteEntry i WriteException mają przeciążenie, które nie określa poziomu ważności. Niejawny poziom WriteEntry ważności przeciążenia to "Informacje", a niejawny poziom WriteException ważności przeciążenia to "Błąd".

W tej tabeli wyjaśniono dane wyjściowe dziennika pokazane w poprzednim przykładzie: z domyślnym DefaultSwitch ustawieniem "Information" tylko drugie wywołanie WriteEntry metody i wywołanie WriteException metody generuje dane wyjściowe dziennika.

Aby rejestrować tylko zdarzenia śledzenia aktywności

  1. Kliknij prawym przyciskiem myszy plik app.config w Eksplorator rozwiązań i wybierz polecenie Otwórz.

    — lub —

    Jeśli nie ma pliku app.config:

    1. W menu Project (Projekt) wybierz pozycję Add New Item (Dodaj nowy element).

    2. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Plik konfiguracji aplikacji.

    3. Kliknij przycisk Dodaj.

  2. Znajdź sekcję <switches> , która znajduje się w <system.diagnostics> sekcji , która znajduje się w sekcji najwyższego poziomu <configuration> .

  3. Znajdź element, który dodaje DefaultSwitch do kolekcji przełączników. Powinien wyglądać podobnie do tego elementu:

    <add name="DefaultSwitch" value="Information" />

  4. Zmień wartość atrybutu value na "ActivityTracing".

  5. Zawartość pliku app.config powinna być podobna do następującego kodu XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.diagnostics>
        <sources>
          <!-- This section configures My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="ActivityTracing" />
        </switches>
        <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
                     Microsoft.VisualBasic, Version=8.0.0.0,
                     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                     processorArchitecture=MSIL"
               initializeData="FileLogWriter"/>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    
  6. Uruchom aplikację w debugerze.

  7. Naciśnij przycisk1.

    Aplikacja zapisuje następujące informacje w pliku danych wyjściowych i dziennika debugowania aplikacji:

    DefaultSource Start: 4 : Entering Button1_Click

    DefaultSource Stop: 5 : Leaving Button1_Click

  8. Zamknij aplikację.

  9. Zmień wartość atrybutu value z powrotem na "Informacje".

    Uwaga

    Ustawienie przełącznika DefaultSwitch kontroluje tylko My.Application.Logwartość . Nie zmienia sposobu działania platformy .NET System.Diagnostics.Trace i System.Diagnostics.Debug klas.

Filtrowanie indywidualne dla odbiorników My.Application.Log

W poprzednim przykładzie pokazano, jak zmienić filtrowanie dla wszystkich My.Application.Log danych wyjściowych. W tym przykładzie pokazano, jak filtrować pojedynczy odbiornik dziennika. Domyślnie aplikacja ma dwa odbiorniki zapisujące dane wyjściowe debugowania aplikacji i plik dziennika.

Plik konfiguracji kontroluje zachowanie odbiorników dziennika, zezwalając każdemu z nich na filtrowanie, które jest podobne do przełącznika dla My.Application.Logprogramu . Odbiornik dziennika wyświetli komunikat tylko wtedy, gdy ważność komunikatu jest dozwolona zarówno przez filtr dziennika DefaultSwitch , jak i odbiornika dziennika.

W tym przykładzie pokazano, jak skonfigurować filtrowanie dla nowego odbiornika debugowania i dodać go do Log obiektu. Domyślny odbiornik debugowania powinien zostać usunięty z Log obiektu, dlatego jest jasne, że komunikaty debugowania pochodzą z nowego odbiornika debugowania.

Aby rejestrować tylko zdarzenia śledzenia aktywności

  1. Kliknij prawym przyciskiem myszy plik app.config w Eksplorator rozwiązań i wybierz polecenie Otwórz.

    — lub —

    Jeśli nie ma pliku app.config:

    1. W menu Project (Projekt) wybierz pozycję Add New Item (Dodaj nowy element).

    2. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Plik konfiguracji aplikacji.

    3. Kliknij przycisk Dodaj.

  2. Kliknij prawym przyciskiem myszy plik app.config w Eksplorator rozwiązań. Wybierz pozycję Otwórz.

  3. Znajdź sekcję <listeners> w <source> sekcji z atrybutem name "DefaultSource", który znajduje się w <sources> sekcji . Sekcja <sources> znajduje się <system.diagnostics> w sekcji w sekcji najwyższego poziomu <configuration> .

  4. Dodaj ten element do <listeners> sekcji:

    <!-- Remove the default debug listener. -->
    <remove name="Default"/>
    <!-- Add a filterable debug listener. -->
    <add name="NewDefault"/>
    
  5. Znajdź sekcję <sharedListeners> w <system.diagnostics> sekcji w sekcji najwyższego poziomu <configuration> .

  6. Dodaj ten element do tej <sharedListeners> sekcji:

    <add name="NewDefault"
         type="System.Diagnostics.DefaultTraceListener,
               System, Version=2.0.0.0, Culture=neutral,
               PublicKeyToken=b77a5c561934e089,
               processorArchitecture=MSIL">
        <filter type="System.Diagnostics.EventTypeFilter"
                initializeData="Error" />
    </add>
    

    Filtr EventTypeFilter przyjmuje jedną z SourceLevels wartości wyliczenia jako initializeData atrybut.

  7. Zawartość pliku app.config powinna być podobna do następującego kodu XML:

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <system.diagnostics>
        <sources>
          <!-- This section configures My.Application.Log -->
          <source name="DefaultSource" switchName="DefaultSwitch">
            <listeners>
              <add name="FileLog"/>
              <!-- Remove the default debug listener. -->
              <remove name="Default"/>
              <!-- Add a filterable debug listener. -->
              <add name="NewDefault"/>
            </listeners>
          </source>
        </sources>
        <switches>
          <add name="DefaultSwitch" value="Information" />
        </switches>
        <sharedListeners>
          <add name="FileLog"
               type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
                     Microsoft.VisualBasic, Version=8.0.0.0,
                     Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                     processorArchitecture=MSIL"
               initializeData="FileLogWriter"/>
          <add name="NewDefault"
               type="System.Diagnostics.DefaultTraceListener,
                     System, Version=2.0.0.0, Culture=neutral,
                     PublicKeyToken=b77a5c561934e089,
                     processorArchitecture=MSIL">
            <filter type="System.Diagnostics.EventTypeFilter"
                    initializeData="Error" />
          </add>
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    
  8. Uruchom aplikację w debugerze.

  9. Naciśnij przycisk1.

    Aplikacja zapisuje następujące informacje w pliku dziennika aplikacji:

    Default Information: 0 : In Button1_Click

    Default Error: 2 : Error in the application.

    Aplikacja zapisuje mniej informacji do danych wyjściowych debugowania aplikacji z powodu bardziej restrykcyjnego filtrowania.

    Default Error 2 Error

  10. Zamknij aplikację.

Aby uzyskać więcej informacji na temat zmieniania ustawień dziennika po wdrożeniu, zobacz Praca z dziennikami aplikacji.

Zobacz też