Udostępnij przez


Śledzenie operacji sterownika

pobierz sterownik JDBC

Sterownik JDBC firmy Microsoft dla programu SQL Server obsługuje korzystanie ze śledzenia (lub rejestrowania), aby pomóc rozwiązać problemy i trudności ze sterownikiem JDBC, gdy jest używany w aplikacji. Aby włączyć korzystanie z logowania, sterownik JDBC używa API do logowania w java.util.logging, który dostarcza zestaw klas do tworzenia obiektów Logger i LogRecord.

Uwaga / Notatka

W przypadku natywnego składnika (sqljdbc_xa.dll), który jest dołączony do sterownika JDBC, śledzenie jest włączane przez zintegrowane środowisko diagnostyczne Built-In Diagnostics (BID). Aby uzyskać informacje na temat BID, zobacz Śledzenie dostępu do danych w programie SQL Server.

Podczas tworzenia aplikacji można wykonywać wywołania obiektów rejestratora, które z kolei tworzą obiekty LogRecord, które są następnie przekazywane do obiektów programu obsługi do przetwarzania. Obiekty rejestratora i programu obsługi używają zarówno poziomów rejestrowania, jak i opcjonalnie filtrów rejestrowania w celu regulowania, które obiekty LogRecords są przetwarzane. Po zakończeniu operacji rejestrowania obiekty programu obsługi mogą opcjonalnie używać obiektów formatera do publikowania informacji dziennika.

Domyślnie struktura java.util.logging zapisuje dane wyjściowe w pliku. Ten plik dziennika wyjściowego musi mieć uprawnienia do zapisu dla kontekstu, w którym jest uruchomiony sterownik JDBC.

Uwaga / Notatka

Aby uzyskać więcej informacji na temat używania różnych obiektów rejestrowania do śledzenia programów, zobacz dokumentację interfejsów API rejestrowania języka Java w witrynie sieci Web Sun Microsystems.

W poniższych sekcjach opisano poziomy rejestrowania i kategorie, które można rejestrować, oraz podano informacje o sposobie włączania śledzenia w aplikacji.

Poziomy rejestrowania

Każda utworzona wiadomość dziennika ma skojarzony poziom rejestrowania. Poziom rejestrowania określa ważność komunikatu dziennika, który jest definiowany przez klasę Level w pliku java.util.logging. Włączenie rejestrowania na jednym poziomie umożliwia również rejestrowanie na wszystkich wyższych poziomach. W tej sekcji opisano poziomy rejestrowania dla kategorii rejestrowania publicznego i kategorii rejestrowania wewnętrznego. Aby uzyskać więcej informacji na temat kategorii rejestrowania, zobacz sekcję Kategorie rejestrowania w tym artykule.

W poniższej tabeli opisano każdy z dostępnych poziomów rejestrowania dla kategorii rejestrowania publicznego.

Name Description
CIĘŻKI Sygnalizuje poważny błąd i jest najwyższym poziomem rejestrowania. W sterowniku JDBC ten poziom jest używany do raportowania błędów i wyjątków.
OSTRZEŻENIE Wskazuje potencjalny problem.
Informacje Zawiera komunikaty informacyjne.
Konfiguracja Udostępnia komunikaty konfiguracyjne. Sterownik JDBC nie udostępnia obecnie żadnych komunikatów konfiguracji.
GRZYWNA Zawiera podstawowe informacje o śledzeniu, w tym wszystkie wyjątki wyrzucane przez metody publiczne.
DROBNIEJSZE Zapewnia szczegółowe informacje śledzące, w tym wszystkie publiczne punkty wejścia i wyjścia metod wraz z powiązanymi typami danych parametrów oraz publiczne właściwości klas publicznych. Ponadto parametry wejściowe, parametry wyjściowe i wartości zwracane przez metodę z wyjątkiem typów wartości zwracanej takich jak CLOB, BLOB, NCLOB, Reader, <stream>.
NAJLEPSZY Zawiera wysoce szczegółowe informacje o śledzeniu. To ustawienie jest najniższym poziomem rejestrowania.
OFF Wyłącza rejestrowanie.
ALL Włącza rejestrowanie wszystkich komunikatów.

W poniższej tabeli opisano każdy z dostępnych poziomów rejestrowania dla kategorii rejestrowania wewnętrznego.

Name Description
CIĘŻKI Wskazuje poważny błąd i jest najwyższym poziomem logowania. W sterowniku JDBC ten poziom jest używany do raportowania błędów i wyjątków.
OSTRZEŻENIE Wskazuje potencjalny problem.
Informacje Zawiera komunikaty informacyjne.
GRZYWNA Udostępnia informacje dotyczące śledzenia, w tym podstawowe operacje tworzenia i niszczenia obiektów. Ponadto wszystkie wyjątki zgłaszane przez metody publiczne.
DROBNIEJSZE Zawiera szczegółowe informacje o śledzeniu, w tym wszystkie punkty wejścia i wyjścia wszystkich metod publicznych oraz skojarzone typy danych parametrów, a także wszystkie właściwości publiczne dla klas publicznych. Ponadto parametry wejściowe, parametry wyjściowe i wartości zwracane przez metodę z wyjątkiem CLOB, BLOB, NCLOB, Reader, <stream> return value types.

Następujące kategorie rejestrowania istniały w wersji 1.2 sterownika JDBC i miały poziom rejestrowania FINE: SQLServerConnection, SQLServerStatement, XA i SQLServerDataSource. Począwszy od wersji 2.0, te kategorie są uaktualniane do poziomu FINER.
NAJLEPSZY Zawiera wysoce szczegółowe informacje o śledzeniu. To ustawienie jest najniższym poziomem rejestrowania.

Następujące kategorie rejestrowania istniały w wersji 1.2 sterownika JDBC i miały poziom rejestrowania FINEST: TDS.DATA i TDS.TOKEN. Począwszy od wersji 2.0, zachowywany jest poziom rejestrowania FINEST.
OFF Wyłącza rejestrowanie.
ALL Włącza rejestrowanie wszystkich komunikatów.

Kategorie rejestrowania

Podczas tworzenia obiektu Loggera, należy określić nazwę podmiotu lub kategorii, z której chcesz otrzymać informacje dziennika. Sterownik JDBC obsługuje następujące publiczne kategorie rejestrowania, które są zdefiniowane w pakiecie sterowników com.microsoft.sqlserver.jdbc.

Name Description
Połączenie Rejestruje komunikaty w klasie SQLServerConnection . Aplikacje mogą ustawić poziom rejestrowania jako FINER.
Statement Rejestruje komunikaty w klasie SQLServerStatement . Aplikacje mogą ustawić poziom logowania jako FINER.
Źródło danych Rejestruje komunikaty w klasie SQLServerDataSource . Aplikacje mogą ustawić poziom rejestrowania jako FINE.
Zbiór wyników Rejestruje komunikaty w klasie SQLServerResultSet . Aplikacje mogą ustawić poziom logowania na FINER.
Driver Rejestruje komunikaty w klasie SQLServerDriver . Aplikacje mogą ustawić poziom logowania jako FINER.
Resiliency Rejestruje komunikaty w klasie SQLServerConnection dotyczące tylko procesów ponownego nawiązania połączeń w celu zapewnienia odporności połączeń w stanie bezczynności. Aplikacje mogą ustawić poziom rejestrowania jako FINE i FINER.
Redirection Rejestruje komunikaty w klasie SQLServerConnection odnoszące się tylko do ponownych prób otwarcia połączenia. Aplikacje mogą ustawić poziom rejestrowania jako FINE.

Począwszy od sterownika JDBC firmy Microsoft w wersji 2.0, sterownik udostępnia również pakiet com.microsoft.sqlserver.jdbc.internals, który obejmuje obsługę rejestrowania dla następujących kategorii rejestrowania wewnętrznego.

Name Description
AuthenticationJNI Rejestruje komunikaty dotyczące problemów z uwierzytelnianiem zintegrowanym z systemem Windows (gdy właściwość połączenia authenticationScheme jest niejawnie lub jawnie ustawiona na NativeAuthentication).

Aplikacje mogą ustawić poziom rejestrowania jako FINEST i FINE.
SQLServerConnection Rejestruje komunikaty w klasie SQLServerConnection . Aplikacje mogą ustawić poziom rejestrowania jako FINE i FINER.
SQLServerDataSource Rejestruje komunikaty w klasach SQLServerDataSource, SQLServerConnectionPoolDataSource i SQLServerPooledConnection .

Aplikacje mogą ustawić poziom rejestrowania jako FINER.
Strumień wejściowy Rejestruje komunikaty o następujących typach danych: java.io.InputStream, java.io.Reader oraz typach danych ze specyfikatorem maksymalnym, takich jak varchar, nvarchar i varbinary.

Aplikacje mogą ustawić poziom rejestrowania jako FINER.
SQLServerException Rejestruje komunikaty w klasie SQLServerException . Aplikacje mogą ustawić poziom rejestrowania jako FINE.
SQLServerResultSet Rejestruje komunikaty w klasie SQLServerResultSet . Aplikacje mogą ustawić poziom rejestrowania jako FINE, FINER i FINEST.
SQLServerStatement Rejestruje komunikaty w klasie SQLServerStatement . Aplikacje mogą ustawić poziom rejestrowania jako FINE, FINER i FINEST.
XA Rejestruje komunikaty dla wszystkich transakcji XA w klasie SQLServerXADataSource . Aplikacje mogą ustawić poziom rejestrowania jako FINE i FINER.
KerbAuthentication Rejestruje komunikaty o typie 4 uwierzytelniania Kerberos (gdy właściwość połączenia authenticationScheme jest ustawiona na JavaKerberos). Aplikacja może ustawić poziom rejestrowania jako FINE lub FINER.
TDS.DANYCH Rejestruje komunikaty zawierające konwersację na poziomie protokołu TDS między sterownikiem a programem SQL Server. Zawartość każdego wysłanego i odebranego pakietu TDS jest szczegółowo rejestrowana w formatach ASCII i szesnastkowym. Poświadczenia logowania (nazwy użytkowników i hasła) nie są rejestrowane. Wszystkie inne dane są rejestrowane.

Ta kategoria tworzy bardzo rozbudowane i szczegółowe komunikaty i można je włączyć tylko przez ustawienie poziomu rejestrowania na FINEST.
TDS.Channel Ta kategoria śledzi akcje kanału komunikacji TCP za pomocą programu SQL Server. Zarejestrowane komunikaty obejmują otwieranie i zamykanie gniazd, a także odczyty i zapisy. Śledzi również komunikaty związane z ustanawianiem protokołu Transport Layer Security (TLS), znanego wcześniej jako Secure Sockets Layer (SSL), połączenia z programem SQL Server.

Tę kategorię można włączyć tylko przez ustawienie poziomu rejestrowania na FINE, FINER lub FINEST.
TDS. Pisarz Ta kategoria śledzi zapisy w kanale TDS. Śledzona jest tylko długość zapisów, a nie zawartość. Ta kategoria śledzi również problemy, gdy sygnał uwagi jest wysyłany do serwera w celu anulowania wykonania instrukcji.

Tę kategorię można włączyć tylko przez ustawienie poziomu logowania na FINEST.
TDS. Czytnik Ta kategoria śledzi niektóre operacje odczytu z kanału TDS na poziomie FINEST. Na poziomie FINEST, śledzenie może być rozbudowane. Na poziomach OSTRZEŻENIE i KRYTYCZNE ta kategoria rejestruje, kiedy sterownik odbiera nieprawidłowy protokół TDS z SQL Server, zanim zamknie połączenie.

Tę kategorię można włączyć tylko przez ustawienie poziomu rejestrowania na FINER i FINEST.
TDS.Polecenie Ta kategoria śledzi przejścia stanów niskiego poziomu oraz inne informacje związane z wykonywaniem poleceń TDS, takich jak wykonywanie instrukcji Transact-SQL, pobieranie kursorów ResultSet, zatwierdzanie transakcji itp.

Tę kategorię można włączyć tylko przez ustawienie poziomu logowania na FINEST.
TDS.TOKEN Ta kategoria rejestruje tylko tokeny w pakietach TDS i jest mniej szczegółowa niż kategoria TDS.DATA. Można to włączyć tylko przez ustawienie poziomu rejestrowania na FINEST.

Na najwyższym poziomie szczegółowości ta kategoria śledzi tokeny TDS podczas ich przetwarzania w odpowiedzi. Na poziomie SEVERE ta kategoria śledzi, gdy napotkany zostanie nieprawidłowy token TDS.
SQLServerDatabaseMetaData Rejestruje komunikaty w klasie SQLServerDatabaseMetaData . Aplikacje mogą ustawić poziom rejestrowania jako FINE.
SQLServerResultSetMetaData Rejestruje komunikaty w klasie SQLServerResultSetMetaData . Aplikacje mogą ustawić poziom rejestrowania jako FINE.
SQLServerParameterMetaData Rejestruje komunikaty w klasie SQLServerParameterMetaData . Aplikacje mogą ustawić poziom rejestrowania jako FINE.
SQLServerBlob Rejestruje komunikaty w klasie SQLServerBlob . Aplikacje mogą ustawić poziom rejestrowania jako FINE.
SQLServerClob Rejestruje komunikaty w klasie SQLServerClob . Aplikacje mogą ustawić poziom rejestrowania jako FINE.
SQLServerSQLXML Rejestruje komunikaty w wewnętrznej klasie SQLServerSQLXML. Aplikacje mogą ustawić poziom rejestrowania jako FINE.
SQLServerDriver Rejestruje komunikaty w klasie SQLServerDriver . Aplikacje mogą ustawić poziom rejestrowania jako FINE.
SQLServerNClob Rejestruje komunikaty w klasie SQLServerNClob . Aplikacje mogą ustawić poziom rejestrowania jako FINE.

Programistyczne włączanie śledzenia

Śledzenie można włączyć programowo, tworząc obiekt rejestratora i wskazując kategorię do zarejestrowania. Na przykład poniższy kod przedstawia sposób włączania rejestrowania dla instrukcji SQL:

Logger logger = Logger.getLogger("com.microsoft.sqlserver.jdbc.Statement");
logger.setLevel(Level.FINER);

Aby wyłączyć rejestrowanie w kodzie, użyj następującego kodu:

logger.setLevel(Level.OFF);

Aby zarejestrować wszystkie dostępne kategorie, użyj następującego kodu:

Logger logger = Logger.getLogger("com.microsoft.sqlserver.jdbc");
logger.setLevel(Level.FINE);

Aby wyłączyć rejestrowaną konkretną kategorię, użyj następującego kodu:

Logger logger = Logger.getLogger("com.microsoft.sqlserver.jdbc.Statement");
logger.setLevel(Level.OFF);

Włączanie śledzenia przy użyciu pliku logging.properties

Śledzenie można również włączyć przy użyciu logging.properties pliku , który można znaleźć w lib katalogu instalacji środowiska Java Runtime Environment (JRE) 8 lub conf folderu dla środowiska Java 9 i nowszych. Ten plik może służyć do ustawiania wartości domyślnych dla rejestratorów i obsług, które będą używane, gdy śledzenie jest włączone.

Poniższa konfiguracja to przykład ustawień, które można wprowadzić w plikach logging.properties :

# Specify the handler, the handlers will be installed during VM startup.
handlers= java.util.logging.FileHandler

# Default global logging level.
.level= OFF

# default file output is in user's home directory.
java.util.logging.FileHandler.pattern = %h/java%u.log
java.util.logging.FileHandler.limit = 5000000
java.util.logging.FileHandler.count = 20
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = FINEST

# Facility specific properties.
com.microsoft.sqlserver.jdbc.level=FINEST

Uwaga / Notatka

Właściwości w logging.properties pliku można ustawić przy użyciu obiektu LogManager, który jest częścią pliku java.util.logging.

Zobacz także

Diagnozowanie problemów ze sterownikiem JDBC