Трассировка операций драйвера

Скачать драйвер JDBC

Драйвер Microsoft JDBC для SQL Server поддерживает использование трассировки (или ведения журнала) для устранения проблем и проблем с драйвером JDBC при его использовании в приложении. Чтобы включить использование трассировки, драйвер JDBC использует интерфейсы API ведения журнала в java.util.logging, который обеспечивает набор классов для создания объектов Logger и LogRecord.

Примечание.

Для собственного компонента (sqljdbc_xa.dll), который включен в комплект драйвера JDBC, трассировка включается стандартом BID. Дополнительные сведения о BID см. в статье Трассировка доступа к данным в SQL Server.

При разработке приложения вы можете выполнять вызовы объектов Logger, которые в свою очередь создают объекты LogRecord, передаваемые затем объектам Handler для обработки. Объекты Logger и Handler используют уровни ведения журнала и, при необходимости, фильтры ведения журнала для регулирования обрабатываемых записей журнала (LogRecord). Когда операции ведения журнала завершены, объекты Handler могут также использовать объекты Formatter для публикации данных журнала.

По умолчанию, среда java.util.logging записывает выходные данные в файл. Файл журнала с выходными данными должен иметь разрешения записи для контекста, в рамках которого работает драйвер JDBC.

Примечание.

Дополнительные сведения об использовании различных объектов ведения журнала для отслеживания программ см. в разделе API-интерфейсы ведения журнала Java документации на веб-сайте Sun Microsystems.

В следующих разделах приводится описание уровней ведения журнала и категорий, которые могут быть занесены в журнал, а также включение трассировки в приложении.

Уровни ведения журнала

Каждое создаваемое сообщение журнала имеет связанный уровень ведения журнала. Уровень ведения журнала определяет важность сообщения журнала, которая задается классом Level в java.util.logging. Включение ведения журнала на одном уровне также включает ведение журнала на всех более высоких уровнях. В данном разделе приводится описание уровней ведения журнала как для открытых категорий ведения журнала, так и для внутренних. Дополнительные сведения о категориях ведения журнала см. в разделе "Категории ведения журнала" этой статьи.

В следующей таблице приводится описание каждого из доступных уровней ведения журнала для открытых категорий ведения журнала.

Имя Описание
SEVERE Указывает серьезный сбой и имеет самый высокий уровень ведения журнала. В драйвере JDBC этот уровень используется для выдачи ошибок и исключений.
ПРЕДУПРЕЖДЕНИЕ Указывает на возможную проблему.
INFO Предоставляет информационные сообщения.
CONFIG Предоставляет сообщения о конфигурации. Драйвер JDBC сейчас не предоставляет сообщений о конфигурации.
FINE Обеспечивает базовую информацию об отслеживании, включая все исключения, возникшие по вине открытых методов.
FINER Предоставляет подробные данные трассировки, включая все входные и выходные точки открытых методов с типами данных связанных параметров, а также все открытые свойства для открытых классов. Кроме этого, входные и выходные параметры и значения, возвращенные методами, кроме возвращаемых значений <потоковых> типов CLOB, BLOB, NCLOB, Reader.
FINEST Обеспечивает наивысший уровень детализации данных трассировки. Этот вариант дает самый низкий уровень ведения журнала.
ВЫКЛ. Отключает ведение журнала.
ВСЕ Включает регистрацию в журнале всех сообщений.

В следующей таблице приводится описание каждого из доступных уровней ведения журнала для внутренних категорий ведения журнала.

Имя Описание
SEVERE Указывает серьезный сбой и имеет самый высокий уровень ведения журнала. В драйвере JDBC этот уровень используется для выдачи ошибок и исключений.
ПРЕДУПРЕЖДЕНИЕ Указывает на возможную проблему.
INFO Предоставляет информационные сообщения.
FINE Обеспечивает информацию о трассировке, включая создание и удаление базового объекта. Помимо этого, информирует обо всех исключениях, возникших из-за открытых методов.
FINER Предоставляет подробные данные трассировки, включая все входные и выходные точки открытых методов с типами данных связанных параметров, а также все открытые свойства для открытых классов. Кроме этого, входные и выходные параметры и значения, возвращенные методами, кроме возвращаемых значений <потоковых> типов CLOB, BLOB, NCLOB, Reader.

Указанные ниже категории ведения журнала существовали в версии 1.2 драйвера JDBC и имели уровень ведения журнала FINE: SQLServerConnection, SQLServerStatement, XA и SQLServerDataSource. Начиная с версии 2.0, эти категории обновлены до уровня FINER.
FINEST Обеспечивает наивысший уровень детализации данных трассировки. Этот вариант дает самый низкий уровень ведения журнала.

Следующие категории ведения журнала существовали в версии 1.2 драйвера JDBC и имели уровень ведения журнала FINEST: TDS.DATA и TDS.TOKEN. Начиная с версии 2.0, эти категории сохраняют уровень ведения журнала FINEST.
ВЫКЛ. Отключает ведение журнала.
ВСЕ Включает регистрацию в журнале всех сообщений.

Категории ведения журнала

При создании объекта Logger следует указать именованную сущность или категорию, из которой нужно получать сведения журнала. Драйвер JDBC поддерживает следующие открытые категории ведения журнала, определенные в пакете драйвера com.microsoft.sqlserver.jdbc.

Имя Описание
Connection Регистрирует сообщения в классе SQLServerConnection. Приложение может задать уровень ведения журнала FINER.
Оператор Регистрирует сообщения в классе SQLServerStatement. Приложение может задать уровень ведения журнала FINER.
DataSource Регистрирует сообщения в классе SQLServerDataSource. Приложение может задать уровень ведения журнала FINE.
ResultSet Регистрирует сообщения в классе SQLServerResultSet. Приложение может задать уровень ведения журнала FINER.
Драйвер Регистрирует сообщения в классе SQLServerDriver. Приложение может задать уровень ведения журнала FINER.
Устойчивость Регистрирует сообщения в классе SQLServer Подключение ion, относящиеся только к отказоустойчивости подключения бездействия. Приложение может задать уровень ведения журнала FINE и FINER.
Перенаправление Регистрирует сообщения в классе SQLServer Подключение ion, относящиеся только к открытым повторным попыткам подключения. Приложение может задать уровень ведения журнала FINE.

Начиная с версии 2.0 драйвера Microsoft JDBC, драйвер также обеспечивает пакет com.microsoft.sqlserver.jdbc.internals, который включает поддержку ведения журнала для следующих внутренних категорий ведения журнала.

Имя Описание
AuthenticationJNI Записывает в журнал сообщения о проблемах со встроенной проверкой подлинности Windows (когда свойство подключения authenticationScheme явно или неявно получает значение NativeAuthentication).

Приложение может задать уровень ведения журнала FINEST и FINE.
SQLServerConnection Регистрирует сообщения в классе SQLServerConnection. Приложение может задать уровень ведения журнала FINE и FINER.
SQLServerDataSource Регистрирует сообщения в классах SQLServerDataSource, SQLServerConnectionPoolDataSource и SQLServerPooledConnection.

Приложение может задать уровень ведения журнала FINER.
InputStream Регистрирует сообщения о следующих типах данных: java.io.InputStream, java.io.Reader и типы данных, которые имеют описатель максимального значения, то есть типы данных varchar, nvarchar и varbinary.

Приложение может задать уровень ведения журнала FINER.
SQLServerException Регистрирует сообщения в классе SQLServerException. Приложение может задать уровень ведения журнала FINE.
SQLServerResultSet Регистрирует сообщения в классе SQLServerResultSet. Приложение может задать уровень ведения журнала FINE, FINER и FINEST.
SQLServerStatement Регистрирует сообщения в классе SQLServerStatement. Приложение может задать уровень ведения журнала FINE, FINER и FINEST.
XA Регистрирует сообщения для всех транзакций XA в классе SQLServerXADataSource. Приложение может задать уровень ведения журнала FINE и FINER.
KerbAuthentication Записывает сообщения о проверке подлинности Kerberos типа 4 (когда для свойства подключения authenticationScheme установлено значение JavaKerberos). Приложение может задать уровень ведения журнала FINE или FINER.
TDS.DATA Регистрирует сообщения, содержащие диалог на уровне протокола TDS между драйвером и SQL Server. Подробное содержимое каждого отправленного и полученного пакета TDS вносится в журнал в виде значений ASCII или шестнадцатеричных значений. Учетные данные для входа (имена пользователей и пароли) не вносятся в журнал. Все остальные данные записываются в журнал.

Данная категория создает очень длинные и подробные сообщения, ее можно включить, только если установить уровень ведения журнала на FINEST.
TDS.Channel Данная категория отслеживает действия канала связи TCP с SQL Server. Вносимые в журнал сообщения включают открытие и закрытие сокета, а также операции считывания и записи. Категория также отслеживает сообщения, связанные с установкой соединения TLS, ранее называемого SSL, с SQL Server.

Эта категория может быть включена, если установить уровень ведения журнала на FINE, FINER или FINEST.
TDS.Writer Эта категория отслеживает операции записи в канал TDS. Отслеживается только длина записей, но не их содержимое. Данная категория также отслеживает отправку сигнала на сервер, запрашивающего отмену выполнения инструкции.

Эта категория может быть включена только установкой уровня ведения журнала FINEST.
TDS.Reader Данная категория отслеживает операции считывания из канала TDS на уровне FINEST. На уровне FINEST отслеживание может быть подробным. На уровнях WARNING и SEVERE данная категория отслеживает получение драйвером недействительного протокола TDS от SQL Server до того, как драйвер закроет соединение.

Эта категория может быть включена, если установить уровень ведения журнала на FINER и FINEST.
TDS.Command Эта категория отслеживает переходы состояния низкого уровня и другую информацию, связанную с выполнением команд TDS, таких как инструкции Transact-SQL, выборки курсора ResultSet, фиксации и так далее.

Эта категория может быть включена только установкой уровня ведения журнала FINEST.
TDS.TOKEN Данная категория вносит в журнал только токены внутри пакетов TDS и является менее подробной, чем категория TDS.DATA. Эта категория может быть включена, только если установить уровень ведения журнала на FINEST.

На уровне FINEST в этой категории отслеживаются токены TDS по мере их обработки в ответе. На уровне SEVERE данная категория отслеживает обнаружение недопустимого токена TDS.
SQLServerDatabaseMetaData Регистрирует сообщения в классе SQLServerDatabaseMetaData. Приложение может задать уровень ведения журнала FINE.
SQLServerResultSetMetaData Регистрирует сообщения в классе SQLServerResultSetMetaData. Приложение может задать уровень ведения журнала FINE.
SQLServerParameterMetaData Регистрирует сообщения в классе SQLServerParameterMetaData. Приложение может задать уровень ведения журнала FINE.
SQLServerBlob Регистрирует сообщения в классе SQLServerBlob. Приложение может задать уровень ведения журнала FINE.
SQLServerClob Регистрирует сообщения в классе SQLServerClob. Приложение может задать уровень ведения журнала FINE.
SQLServerSQLXML Регистрирует сообщения во внутреннем классе SQLServerSQLXML. Приложение может задать уровень ведения журнала FINE.
SQLServerDriver Регистрирует сообщения в классе SQLServerDriver. Приложение может задать уровень ведения журнала FINE.
SQLServerNClob Регистрирует сообщения в классе SQLServerNClob. Приложение может задать уровень ведения журнала FINE.

Включение трассировки программным способом

Трассировку можно включить программно, создав объект Logger и указав категорию для регистрации. Например, в следующем коде показано включение ведения журнала для инструкций SQL:

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

Чтобы отключить ведение журнала в коде, используйте следующий код:

logger.setLevel(Level.OFF);

Чтобы регистрировать все доступные категории, используйте следующий код:

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

Чтобы отключить регистрацию в журнале определенной категории, используйте следующий код:

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

Включение трассировки с помощью файла logging.properties

Вы также можете включить трассировку с помощью logging.properties файла, который можно найти в lib каталоге установки среды выполнения Java (JRE) 8 или conf папки для Java 9 и более поздних версий. Файл может быть использован для установки значений по умолчанию для журналов и обработчиков, которые будут использованы, если трассировка включена.

Далее приведен пример конфигурации, которую можно задать в файлах 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

Примечание.

Свойства можно задать в файлеlogging.properties с помощью объекта LogManager, который является частью java.util.logging.

См. также

Диагностика проблем с JDBC Driver