Rejestrowanie po stronie klienta przy użyciu biblioteki klienta dla platformy .NET

Korzystając z biblioteki klienta usługi Azure Storage dla platformy .NET (w wersji 2.1 lub nowszej), można rejestrować żądania usługi Azure Storage z poziomu aplikacji klienckiej .NET przy użyciu standardowej infrastruktury diagnostyki .NET. W ten sposób można zobaczyć szczegóły żądań wysyłanych przez klienta do usług Azure Storage i odbieranych odpowiedzi.

Biblioteka klienta usługi Azure Storage zapewnia kontrolę nad tym, które żądania magazynu można rejestrować, a infrastruktura diagnostyki platformy .NET zapewnia pełną kontrolę nad danymi dziennika, takimi jak miejsce ich wysyłania. Możesz na przykład wysłać dane dziennika do pliku lub do aplikacji do przetwarzania. W połączeniu z usługą Azure analityka magazynu i monitorowaniem sieci można użyć rejestrowania biblioteki klienta do utworzenia szczegółowego obrazu interakcji aplikacji z usługami Azure Storage. Aby uzyskać więcej informacji, zobacz Monitorowanie, diagnozowanie i rozwiązywanie problemów z usługą Azure Storage.

Jak włączyć rejestrowanie biblioteki klienta

Poniższy przykład przedstawia konfigurację system.diagnostics niezbędną do zbierania i utrwalania komunikatów dziennika magazynu w pliku tekstowym. Sekcję konfiguracji można dodać do plików app.config lub web.config.

Uwaga

Jeśli używasz wersji starszej niż 10.0.0, użyj nazwy Microsoft.WindowsAzure.Storage zamiast Microsoft.Azure.Storage.

<system.diagnostics>  
     <!--In a dev/test environment you can set autoflush to true in order to autoflush to the log file. -->  
  <trace autoflush="false">  
    <listeners>  
      ...
      <add name="storageListener" />  
    </listeners>  
  </trace>  
  <sources>  
    <source name="Microsoft.Azure.Storage">  
      <listeners>  
        <add name="storageListener"/>  
      </listeners>  
    </source>  
  </sources>  
  <switches>  
    <add name="Microsoft.Azure.Storage" value="Verbose" />  
  </switches>  
  <sharedListeners>  
    <add name="storageListener"  
      type="System.Diagnostics.TextWriterTraceListener"  
      initializeData="C:\logs\WebRole.log"
      traceOutputOptions="DateTime" />  
  </sharedListeners>  
</system.diagnostics>  
  

Uwaga

.NET Framework użytkowników w wersjach 4.6.1-4.7.1 (włącznie) mogą wystąpić problemy z rejestrowaniem podczas korzystania z artefaktów platformy .NET Standard 2.0 bibliotek usługi Azure Storage, które mogą być automatycznie wybierane przez menedżera pakietów NuGet programu Visual Studio. Biblioteki są również publikowane jako artefakty .NET Framework 4.5.2, które nie występują w tych problemach. Aby uzyskać więcej informacji, przeczytaj o obsłudze wersji platformy .NET Standard.

W tym przykładzie biblioteka klienta konfiguruje zapisywanie komunikatów dziennika w pliku C:\logs\WebRole.logfizycznym . Można również użyć innych odbiorników śledzenia, takich jak EventLogTraceListener do zapisu w dzienniku zdarzeń systemu Windows, lub EventProviderTraceListener do zapisywania danych śledzenia w podsystemie ETW.

Ważne

Pełna ścieżka folderu dla pliku dziennika musi istnieć w lokalnym systemie plików. W tym przykładzie oznacza to, że należy najpierw utworzyć C:\logs folder przed zapisaniem dzienników w pliku w tym folderze.

Ponadto można ustawić autoflush na wartość true, aby zapisywać wpisy dziennika w pliku natychmiast zamiast buforować je. To ustawienie może być przydatne w środowisku deweloperskim/testowym z małą ilością komunikatów śledzenia, ale w środowisku produkcyjnym może być konieczne ustawienie automatycznego napływu na wartość false. Ustawienia konfiguracji służą do włączania śledzenia klienta (i określania poziomu, takiego jak Pełne, dla wszystkich komunikatów) dla wszystkich operacji magazynu na kliencie.

Id Poziom dziennika Zdarzenia
0 Wyłączone Nic nie jest rejestrowane.
1 Błąd Jeśli wyjątek nie może być obsługiwany wewnętrznie i jest zgłaszany użytkownikowi, jest rejestrowany jako błąd.
2 Ostrzeżenie Jeśli wyjątek zostanie przechwycony i obsłużony wewnętrznie, zostanie zarejestrowany jako ostrzeżenie. Podstawowym przypadkiem użycia dla tego poziomu dziennika jest scenariusz ponawiania próby, w którym wyjątek nie jest zwracany do użytkownika, aby ponowić próbę. To zachowanie może również wystąpić w operacjach, takich jak CreateIfNotExists, gdzie błąd 404 jest obsługiwany w trybie dyskretnym.
3 Informacyjne Rejestrowane są następujące informacje:

•Zaraz po wywołaniu metody w celu rozpoczęcia operacji są rejestrowane szczegóły żądania, takie jak identyfikator URI i identyfikator żądania klienta.

•Ważne kamienie milowe, takie jak rozpoczęcie/koniec wysyłania żądania, rozpoczęcie/zakończenie przekazywania danych, rozpoczęcie/koniec odbierania odpowiedzi, rozpoczęcie/koniec pobierania danych są rejestrowane w celu oznaczenia sygnatur czasowych.

•Bezpośrednio po odebraniu nagłówków rejestrowane są szczegóły odpowiedzi, takie jak identyfikator żądania i kod stanu HTTP.

•Jeśli operacja zakończy się niepowodzeniem, a klient magazynu zdecyduje się ponowić próbę, przyczyna tej decyzji jest rejestrowana wraz z informacjami o tym, kiedy nastąpi następne ponowienie próby.

•Wszystkie limity czasu po stronie klienta są rejestrowane, gdy klient magazynu zdecyduje się przerwać oczekujące żądanie.
4 Pełny Rejestrowane są następujące informacje:

•Ciąg do podpisania dla każdego żądania.

•Wszelkie dodatkowe szczegóły dotyczące operacji (do każdej operacji do zdefiniowania i używania).

Domyślnie biblioteka klienta rejestruje szczegóły wszystkich operacji magazynu na poziomie szczegółowości określonym w pliku konfiguracji. Możesz również ograniczyć rejestrowanie do określonych obszarów aplikacji klienckiej, aby zmniejszyć ilość rejestrowanych danych i ułatwić znalezienie potrzebnych informacji. Aby ograniczyć ilość danych zapisywanych w dziennikach, musisz dodać kod do aplikacji klienckiej. Zazwyczaj po włączeniu śledzenia po stronie klienta w pliku konfiguracji należy wyłączyć go globalnie w kodzie przy użyciu klasy OperationContext . Można to zrobić na przykład w aplikacji ASP.NET MVC w metodzie Application_Start , zanim aplikacja wykona dowolne operacje magazynu:

protected void Application_Start()  
{  
    ...  
  
    // Disable Default Logging for Windows Azure Storage  
    OperationContext.DefaultLogLevel = LogLevel.Off;  
  
    // Verify that all of the tables, queues, and blob containers used in this application  
    // exist, and create any that don't already exist.  
    CreateTablesQueuesBlobContainers();  
}  

Następnie można włączyć śledzenie dla określonych operacji, które cię interesują, tworząc niestandardowy obiekt OperationContext , który definiuje poziom rejestrowania. Następnie przekaż obiekt OperationContext jako parametr do metody Execute używanej do wywołania operacji magazynu, jak w poniższym przykładzie:

[HttpPost]  
[ValidateAntiForgeryToken]  
public ActionResult Create(Subscriber subscriber)  
{  
    if (ModelState.IsValid)  
    {  
       ...  
        var insertOperation = TableOperation.Insert(subscriber);  
        OperationContext verboseLoggingContext = new OperationContext() { LogLevel = LogLevel.Verbose };  
        mailingListTable.Execute(insertOperation, null, verboseLoggingContext);  
        return RedirectToAction("Index");  
    }  
  
    ...  
    return View(subscriber);  
}  
  

Schemat dziennika po stronie klienta i przykład

Poniższy przykład to wyodrębnienie z dziennika po stronie klienta wygenerowanego przez bibliotekę klienta dla operacji z identyfikatorem żądania klienta, który zawiera c3aa328b. Identyfikator żądania klienta jest identyfikatorem korelacji, który umożliwia korelowanie komunikatów rejestrowanych po stronie klienta z śladami sieci i dziennikami magazynu. Aby uzyskać więcej informacji na temat korelacji, zobacz Monitorowanie, diagnozowanie i rozwiązywanie problemów z usługą Azure Storage. Wyodrębnianie zawiera komentarz (wcięty i kursywę) dla niektórych kluczowych informacji, które można zaobserwować z plików dziennika.

Aby zilustrować tę funkcję przy użyciu pierwszego wiersza następującego pliku dziennika, pola są następujące:

Pole dziennika Wartość
Element źródłowy Microsoft.Azure.Storage
Szczegółowości Informacje
Verbosity Nie 3
Identyfikator żądania klienta c3aa328b...
Tekst operacji Rozpoczynanie operacji z lokalizacją Podstawowa na tryb lokalizacji PrimaryOnly.

Microsoft.Azure.Storage Information: 3 : c3aa328b...: Starting operation with location Primary per location mode PrimaryOnly.
Powyższy komunikat śledzenia pokazuje, że tryb lokalizacji jest ustawiony tylko na podstawowy, co oznacza, że żądanie, które zakończyło się niepowodzeniem, nie zostanie wysłane do lokalizacji pomocniczej.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Starting synchronous request to https://storageaccountname.table.core.windows.net/mailinglist.
Powyższy komunikat śledzenia pokazuje, że żądanie jest synchroniczne.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Setting payload format for the request to 'Json'.
Powyższy komunikat śledzenia pokazuje, że odpowiedź powinna być zwracana w formacie JSON.
Microsoft.Azure.Storage Verbose: 4 : c3aa328b...: StringToSign = GET...Fri, 23 May 2014 06:19:48 GMT./storageaccountname/mailinglist.
Powyższy komunikat śledzenia zawiera informacje StringToSign, które są przydatne do debugowania błędów uwierzytelniania. Pełne komunikaty zawierają również pełne szczegóły żądania, w tym typ operacji i parametry żądania.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Waiting for response.
Powyższy komunikat śledzenia pokazuje, że żądanie zostało wysłane, a klient oczekuje na odpowiedź.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Response received. Status code = 200, Request ID = 417db530-853d-48a7-a23c-0c8d5f728178, Content-MD5 = , ETag =
Powyższy komunikat śledzenia pokazuje, że odpowiedź została odebrana i jej kod stanu HTTP.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Response headers were processed successfully, proceeding with the rest of the operation.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Processing response body.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Retrieved '8' results with continuation token ''.
Powyższy komunikat śledzenia pokazuje, że pobrano 8 wyników i nie podano tokenu kontynuacji, co oznacza, że nie ma więcej wyników dla tego zapytania.
Microsoft.Azure.Storage Information: 3 : c3aa328b...: Operation completed successfully.
Powyższy komunikat śledzenia pokazuje, że operacja została ukończona pomyślnie.

Następujące dwa pełne wpisy dziennika (poziom 4) pokazują żądanie HEAD i DELETE oraz ilustrują szczegółowe informacje w polu Tekst operacji :
Microsoft.Azure.Storage Verbose: 4 : 07b26a5d...: StringToSign = HEAD............x-ms-client-request-id:07b26a5d....x-ms-date:Tue, 03 Jun 2014 10:33:11 GMT.x-ms-version:2014-02-14./storageaccountname/azuremmblobcontainer.restype:container.
Microsoft.Azure.Storage Verbose: 4 : 07b26a5d...: StringToSign = DELETE............x-ms-client-request-id:07b26a5d....x-ms-date:Tue, 03 Jun 2014 10:33:12 GMT.x-ms-version:2014-02-14./storageaccountname/azuremmblobcontainer.restype:container.
Powyższy komunikat śledzenia przedstawia pole OperationText w pełnych komunikatach śledzenia, w tym szczegółowe informacje związane z określonym żądaniem. Te szczegóły obejmują typ operacji HTTP (na przykład HEAD, DELETE, POST), identyfikator żądania klienta, sygnaturę czasową, wersję zestawu SDK i dodatkowe dane specyficzne dla operacji.