Konfigurowanie śledzenia
W tym temacie opisano sposób włączania śledzenia, konfigurowania źródeł śledzenia w celu emitowania śladów i ustawiania poziomów śledzenia, ustawiania śledzenia i propagacji w celu obsługi kompleksowej korelacji śledzenia oraz ustawiania odbiorników śledzenia w celu uzyskania dostępu do śladów.
Aby uzyskać zalecenia dotyczące ustawień śledzenia w środowisku produkcyjnym lub debugowaniu, zobacz Zalecane Ustawienia dotyczące śledzenia i rejestrowania komunikatów.
Ważne
W systemie Windows 8 należy uruchomić aplikację z podwyższonym poziomem uprawnień (Uruchom jako Administracja istrator), aby aplikacja wygenerowała dzienniki śledzenia.
Włączenie debugowania
Program Windows Communication Foundation (WCF) generuje następujące dane na potrzeby śledzenia diagnostycznego:
Ślady kamieni milowych procesu we wszystkich składnikach aplikacji, takich jak wywołania operacji, wyjątki kodu, ostrzeżenia i inne istotne zdarzenia przetwarzania.
Zdarzenia błędów systemu Windows w przypadku awarii funkcji śledzenia. Zobacz Rejestrowanie zdarzeń.
Śledzenie WCF jest oparte na systemie System.Diagnostics. Aby użyć śledzenia, należy zdefiniować źródła śledzenia w pliku konfiguracji lub w kodzie. Program WCF definiuje źródło śledzenia dla każdego zestawu WCF. Źródło System.ServiceModel
śledzenia jest najbardziej ogólnym źródłem śledzenia WCF i rejestruje punkty kontrolne przetwarzania w stosie komunikacji WCF, od wprowadzania/opuszczania transportu do wprowadzania/opuszczania kodu użytkownika. Źródło System.ServiceModel.MessageLogging
śledzenia rejestruje wszystkie komunikaty, które przepływają przez system.
Śledzenie nie jest domyślnie włączone. Aby aktywować śledzenie, należy utworzyć odbiornik śledzenia i ustawić poziom śledzenia inny niż "Wyłączone" dla wybranego źródła śledzenia w konfiguracji; W przeciwnym razie program WCF nie generuje żadnych śladów. Jeśli nie określisz odbiornika, śledzenie zostanie automatycznie wyłączone. Jeśli odbiornik jest zdefiniowany, ale nie określono żadnego poziomu, poziom jest domyślnie ustawiony na wartość "Wyłączone", co oznacza, że żadne ślady nie są emitowane.
Jeśli używasz punktów rozszerzalności programu WCF, takich jak wywołania operacji niestandardowych, należy emitować własne ślady. Dzieje się tak, ponieważ w przypadku zaimplementowania punktu rozszerzalności program WCF nie może już emitować standardowych śladów w ścieżce domyślnej. Jeśli nie zaimplementujesz obsługi śledzenia ręcznego przez emitowanie śladów, mogą nie być widoczne oczekiwane ślady.
Śledzenie można skonfigurować, edytując plik konfiguracji aplikacji — web.config dla aplikacji hostowanych w sieci Web lub Appname.exe.config dla aplikacji hostowanych samodzielnie. Poniżej przedstawiono przykład takiej edycji. Aby uzyskać więcej informacji na temat tych ustawień, zobacz sekcję "Konfigurowanie odbiorników śledzenia do korzystania ze śladów".
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="traceListener"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData= "c:\log\Traces.svclog" />
</listeners>
</source>
</sources>
</system.diagnostics>
</configuration>
Uwaga
Aby edytować plik konfiguracji projektu usługi WCF w programie Visual Studio, kliknij prawym przyciskiem myszy plik konfiguracji aplikacji — Web.config dla aplikacji hostowanych w sieci Web lub Appname.exe.config dla aplikacji hostowanej samodzielnie w Eksplorator rozwiązań. Następnie wybierz element menu kontekstowego Edytuj konfigurację programu WCF. Spowoduje to uruchomienie narzędzia edytora konfiguracji (SvcConfigEditor.exe), które umożliwia modyfikowanie ustawień konfiguracji usług WCF przy użyciu graficznego interfejsu użytkownika.
Konfigurowanie źródeł śledzenia w celu emitowania śladów
Program WCF definiuje źródło śledzenia dla każdego zestawu. Dostęp do śladów generowanych w zestawie są uzyskiwane przez odbiorniki zdefiniowane dla tego źródła. Zdefiniowane są następujące źródła śledzenia:
System.ServiceModel: Rejestruje wszystkie etapy przetwarzania WCF, za każdym razem, gdy konfiguracja jest odczytywana, komunikat jest przetwarzany w transporcie, przetwarzaniu zabezpieczeń, komunikat jest wysyłany w kodzie użytkownika itd.
System.ServiceModel.MessageLogging: rejestruje wszystkie komunikaty, które przepływają przez system.
System.identitymodel.
System.ServiceModel.Activation.
System.IO.Log: rejestrowanie interfejsu .NET Framework w systemie plików Common Log File System (CLFS).
System.Runtime.Serialization: rejestruje, kiedy obiekty są odczytywane lub zapisywane.
Cardspace.
Każde źródło śledzenia można skonfigurować tak, aby używało tego samego (udostępnionego) odbiornika, jak pokazano w poniższym przykładzie konfiguracji.
<configuration>
<system.diagnostics>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="CardSpace">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IO.Log">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.Runtime.Serialization">
<listeners>
<add name="xml" />
</listeners>
</source>
<source name="System.IdentityModel">
<listeners>
<add name="xml" />
</listeners>
</source>
</sources>
<sharedListeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="c:\log\Traces.svclog" />
</sharedListeners>
</system.diagnostics>
</configuration>
Ponadto można dodać zdefiniowane przez użytkownika źródła śledzenia, jak pokazano w poniższym przykładzie, aby emitować ślady kodu użytkownika.
<system.diagnostics>
<sources>
<source name="UserTraceSource" switchValue="Warning, ActivityTracing" >
<listeners>
<add name="xml"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="C:\logs\UserTraces.svclog" />
</listeners>
</source>
</sources>
<trace autoflush="true" />
</system.diagnostics>
Aby uzyskać więcej informacji na temat tworzenia źródeł śledzenia zdefiniowanych przez użytkownika, zobacz Rozszerzanie śledzenia.
Konfigurowanie odbiorników śledzenia do korzystania ze śladów
W czasie wykonywania program WCF generuje dane śledzenia do odbiorników, które przetwarzają dane. Program WCF udostępnia kilka wstępnie zdefiniowanych odbiorników dla System.Diagnosticsprogramu , które różnią się formatem używanym na potrzeby danych wyjściowych. Można również dodać niestandardowe typy odbiorników.
Można użyć add
określić nazwę i typ odbiornik śledzenia ma być używany. W naszej przykładowej konfiguracji nazwaliśmy odbiornik traceListener
i dodaliśmy standardowy odbiornik śledzenia programu .NET Framework (System.Diagnostics.XmlWriterTraceListener
) jako typ, którego chcemy użyć. Dla każdego źródła można dodać dowolną liczbę odbiorników śledzenia. Jeśli odbiornik śledzenia emituje ślad do pliku, należy określić lokalizację pliku wyjściowego i nazwę w pliku konfiguracji. W tym celu należy ustawić initializeData
nazwę pliku dla tego odbiornika. Jeśli nie określisz nazwy pliku, zostanie wygenerowana losowa nazwa pliku na podstawie używanego typu odbiornika. Jeśli XmlWriterTraceListener jest używany, nazwa pliku bez rozszerzenia nie jest generowana. W przypadku zaimplementowania odbiornika niestandardowego można również użyć tego atrybutu do odbierania danych inicjalizacji innych niż nazwa pliku. Można na przykład określić identyfikator bazy danych dla tego atrybutu.
Niestandardowy odbiornik śledzenia można skonfigurować tak, aby wysyłał ślady w sieci, na przykład do zdalnej bazy danych. Jako narzędzie do wdrażania aplikacji należy wymusić odpowiednią kontrolę dostępu w dziennikach śledzenia na maszynie zdalnej.
Można również programowo skonfigurować odbiornik śledzenia. Aby uzyskać więcej informacji, zobacz How to: Create and Initialize Trace Listeners (Instrukcje: tworzenie i inicjowanie odbiorników śledzenia) oraz Creating a Custom TraceListener (Tworzenie i inicjowanie odbiorników śledzenia) oraz Creating a Custom TraceListener (Tworzenie niestandardowego elementu TraceListener).
Uwaga
Ponieważ System.Diagnostics.XmlWriterTraceListener
źródło śledzenia nie jest bezpieczne wątkowo, może blokować zasoby wyłącznie podczas wyprowadzania śladów. Jeśli wiele wątków generuje ślady do źródła śledzenia skonfigurowanego do korzystania z tego odbiornika, rywalizacja o zasoby może wystąpić, co powoduje znaczny problem z wydajnością. Aby rozwiązać ten problem, należy zaimplementować niestandardowy odbiornik, który jest bezpieczny wątkowo.
Poziom śledzenia
Poziom śledzenia jest kontrolowany przez switchValue
ustawienie źródła śledzenia. Dostępne poziomy śledzenia opisano w poniższej tabeli.
Poziom śledzenia | Charakter śledzonych zdarzeń | Zawartość śledzonych zdarzeń | Śledzone zdarzenia | Element docelowy użytkownika |
---|---|---|---|---|
Wyłączona | Brak | Brak | Nie są emitowane żadne ślady. | Nie dotyczy |
Krytyczne | Zdarzenia ujemne: zdarzenia wskazujące nieoczekiwane przetwarzanie lub warunek błędu. | Nieobsługiwane wyjątki, w tym następujące, są rejestrowane: -Outofmemoryexception - ThreadAbortException (CLR wywołuje dowolny element ThreadAbortExceptionHandler) - StackOverflowException (nie można złapać) -Configurationerrorsexception -Sehexception — Błędy uruchamiania aplikacji — Zdarzenia niepowodzenia - System zawiesza się - Zatrute komunikaty: ślady komunikatów, które powodują niepowodzenie aplikacji. |
Administratorzy Deweloperzy aplikacji |
|
Błąd | Zdarzenia ujemne: zdarzenia wskazujące nieoczekiwane przetwarzanie lub warunek błędu. | Wystąpiło nieoczekiwane przetwarzanie. Aplikacja nie mogła wykonać zadania zgodnie z oczekiwaniami. Jednak aplikacja jest nadal uruchomiona. | Wszystkie wyjątki są rejestrowane. | Administratorzy Deweloperzy aplikacji |
Ostrzeżenie | Zdarzenia ujemne: zdarzenia wskazujące nieoczekiwane przetwarzanie lub warunek błędu. | Wystąpił możliwy problem lub mógł wystąpić, ale aplikacja nadal działa poprawnie. Może jednak nie działać prawidłowo. | — Aplikacja odbiera więcej żądań niż zezwala na ustawienia ograniczania przepustowości. - Kolejka odbierającego znajduje się w pobliżu maksymalnej skonfigurowanej pojemności. — Przekroczono limit czasu. — Poświadczenia są odrzucane. |
Administratorzy Deweloperzy aplikacji |
Informacja | Zdarzenia "Pozytywne": zdarzenia oznaczające pomyślne kamienie milowe | Ważne i pomyślne kamienie milowe wykonywania aplikacji, niezależnie od tego, czy aplikacja działa prawidłowo, czy nie. | Ogólnie rzecz biorąc, komunikaty przydatne do monitorowania i diagnozowania stanu systemu, mierzenia wydajności lub profilowania są generowane. Możesz użyć takich informacji na potrzeby planowania pojemności i zarządzania wydajnością: - Kanały są tworzone. — Odbiorniki punktu końcowego są tworzone. - Komunikat wprowadza/opuszcza transport. — Pobierany jest token zabezpieczający. - Ustawienie konfiguracji jest odczytywane. |
Administratorzy Deweloperzy aplikacji Deweloperzy produktów. |
Pełne informacje | Zdarzenia "Pozytywne": zdarzenia oznaczające pomyślne kamienie milowe. | Zdarzenia niskiego poziomu dla kodu użytkownika i obsługi są emitowane. | Ogólnie rzecz biorąc, można użyć tego poziomu do debugowania lub optymalizacji aplikacji. - Zrozumiały nagłówek wiadomości. |
Administratorzy Deweloperzy aplikacji Deweloperzy produktów. |
ActivityTracing | Przepływ zdarzeń między działaniami przetwarzania i składnikami. | Ten poziom umożliwia administratorom i deweloperom korelowanie aplikacji w tej samej domenie aplikacji: — Ślady granic działań, takie jak uruchamianie/zatrzymywanie. - Ślady transferów. |
wszystkie | |
wszystkie | Aplikacja może działać prawidłowo. Wszystkie zdarzenia są emitowane. | Wszystkie poprzednie zdarzenia. | wszystkie |
Poziomy z pełnej do krytycznej są ułożone na siebie, czyli każdy poziom śledzenia obejmuje wszystkie poziomy powyżej, z wyjątkiem poziomu Wyłączone. Na przykład odbiornik nasłuchujący na poziomie Ostrzeżenie odbiera ślady Krytyczne, Błąd i Ostrzeżenie. Na poziomie Wszystkie znajdują się zdarzenia z pełnej do zdarzeń śledzenia krytycznego i aktywności.
Uwaga
Poziomy Informacje, Pełne i ActivityTracing generują wiele śladów, co może negatywnie wpłynąć na przepływność komunikatów, jeśli wykorzystano wszystkie dostępne zasoby na maszynie.
Konfigurowanie śledzenia działań i propagacji na potrzeby korelacji
Wartość określona activityTracing
dla atrybutu switchValue
służy do włączania śledzenia działań, które emituje ślady dla granic działań i transferów w punktach końcowych.
Uwaga
W przypadku korzystania z niektórych funkcji rozszerzalności w programie WCF może wystąpić błąd NullReferenceException po włączeniu śledzenia aktywności. Aby rozwiązać ten problem, sprawdź plik konfiguracji aplikacji i upewnij się, że switchValue
atrybut źródła śledzenia nie jest ustawiony na activityTracing
wartość .
Atrybut propagateActivity
wskazuje, czy działanie powinno być propagowane do innych punktów końcowych uczestniczących w wymianie komunikatów. Ustawiając tę wartość na true
, można pobrać pliki śledzenia generowane przez dowolne dwa punkty końcowe i obserwować, jak zestaw śladów w jednym punkcie końcowym przepływał do zestawu śladów w innym punkcie końcowym.
Aby uzyskać więcej informacji na temat śledzenia i propagacji działań, zobacz Propagacja.
Wartości zarówno, jak propagateActivity
i ActivityTracing
logiczne mają zastosowanie do elementu System.ServiceModel TraceSource. Wartość ActivityTracing
ma również zastosowanie do dowolnego źródła śledzenia, w tym WCF lub zdefiniowanych przez użytkownika.
Nie można użyć atrybutu propagateActivity
ze źródłami śledzenia zdefiniowanymi przez użytkownika. W przypadku propagacji identyfikatora działania kodu użytkownika upewnij się, że nie ustawiono elementu ServiceModel ActivityTracing
, a atrybut ServiceModel propagateActivity
jest ustawiony na true
wartość .