Seguimiento del funcionamiento del controlador

Descargar controlador JDBC

El Microsoft JDBC Driver para SQL Server admite el uso del seguimiento (o registro) para facilitar la resolución de problemas con el controlador JDBC durante su uso en la aplicación. Para habilitar el uso de la función de seguimiento, el controlador JDBC usa las API de registro de java.util.logging, que proporcionan un conjunto de clases para crear objetos Logger y LogRecord.

Nota

En el caso del componente nativo (sqljdbc_xa.dll) que se incluye con el controlador JDBC, el marco de diagnósticos integrados (BID) habilita el seguimiento. Para obtener información sobre BID, vea la página sobre seguimiento de acceso de datos de SQL Server 2005 (puede estar en inglés).

Al desarrollar la aplicación, puede realizar llamadas a objetos Logger, que a su vez crean objetos LogRecord que, después, se pasan a los objetos Handler para su procesamiento. Ambos objetos registrador y controlador usan niveles de registro y, además, filtros de registro, para regular qué LogRecords se procesan. Una vez completadas las operaciones de registro, los objetos Handler pueden usar de forma opcional objetos Formatter para publicar la información de registro.

De forma predeterminada, el marco java.util.logging escribe los resultados en un archivo. Este archivo de registro de salida debe tener permisos de escritura para el contexto en que se ejecuta el controlador JDBC.

Nota

Para obtener más información acerca del uso de varios objetos de registro para programar el seguimiento, consulte la sección sobre API de registro de Java en el sitio web de Sun Microsystems.

En la siguiente sección se describen los niveles y las categorías de registro de los que se puede hacer un seguimiento y se proporciona información sobre cómo habilitar el seguimiento en la aplicación.

Niveles de registro

Cada mensaje de registro creado tiene un nivel de registro asociado. El nivel de registro determina la importancia del mensaje de registro, que es definido por la clase Level de java.util.logging. Al habilitar el registro en un nivel, se habilita también en todos los niveles superiores. En esta sección se describen los niveles de registro para las categorías de registro públicas y también para las internas. Para más información acerca de las categorías de registro, vea en este artículo la sección Categorías de registro.

La tabla siguiente describe cada uno de los niveles de registro para categorías de registro públicas.

Nombre Descripción
SEVERE Indica un error grave y es el nivel de registro máximo. En el controlador JDBC, este nivel se utiliza para informar de errores y excepciones.
WARNING Indica un posible problema.
INFO Proporciona mensajes informativos.
CONFIG Proporciona mensajes de configuración. El controlador JDBC no proporciona actualmente mensajes de configuración.
FINE Proporciona información de seguimiento básica, que incluye todas las excepciones producidas por los métodos públicos.
FINER Proporciona información de seguimiento detallada, que incluye todos los puntos de entrada y salida de los métodos públicos junto con los tipos de datos de parámetro asociados y todas las propiedades públicas de la clase pública. Además, los parámetros de entrada, los parámetros de salida y el método devuelven valores salvo los tipos de valores de devolución CLOB, BLOB, NCLOB, Reader y <stream>.
FINEST Proporciona información de seguimiento muy detallada. Esta configuración es el nivel de registro mínimo.
Apagado Desactiva el registro.
ALL Habilita el registro de todos los mensajes.

La tabla siguiente describe cada uno de los niveles de registro para categorías de registro internas.

Nombre Descripción
SEVERE Indica un error grave y es el nivel de registro máximo. En el controlador JDBC, este nivel se utiliza para informar de errores y excepciones.
WARNING Indica un posible problema.
INFO Proporciona mensajes informativos.
FINE Proporciona información de seguimiento que incluye la creación y destrucción de objetos básicos. Además, incluye todas las excepciones producidas por los métodos públicos.
FINER Proporciona información de seguimiento detallada, que incluye todos los puntos de entrada y salida de los métodos públicos junto con los tipos de datos de parámetro asociados y todas las propiedades públicas de la clase pública. Además, los parámetros de entrada, los parámetros de salida y el método devuelven valores salvo los tipos de valores de devolución CLOB, BLOB, NCLOB, Reader y <stream>.

En la versión 1.2 del controlador JDBC existían las siguientes categorías de registro y tenían el nivel de registro FINE: SQLServerConnection, SQLServerStatement, XA y SQLServerDataSource. Desde la versión 2.0, estas categorías se han actualizado al nivel FINER.
FINEST Proporciona información de seguimiento muy detallada. Esta configuración es el nivel de registro mínimo.

En la versión 1.2 del controlador JDBC existían las siguientes categorías de registro y tenían el nivel de registro FINEST: TDS.DATA y TDS.TOKEN. Desde la versión 2.0, conservan el nivel de registro FINEST.
Apagado Desactiva el registro.
ALL Habilita el registro de todos los mensajes.

Categorías de registro

Al crear un objeto Logger, debe indicar al objeto de qué entidad con nombre o categoría le interesa obtener información de registro. El controlador JDBC admite las siguientes categorías de registro público, que son definidas en el paquete del controlador com.microsoft.sqlserver.jdbc.

Nombre Descripción
Conexión Registra mensajes en la clase SQLServerConnection. La aplicación puede configurar el nivel de registro como FINER.
. Registra mensajes en la clase SQLServerStatement. La aplicación puede configurar el nivel de registro como FINER.
DataSource Registra mensajes en la clase SQLServerDataSource. La aplicación puede configurar el nivel de registro como FINE.
ResultSet Registra mensajes en la clase SQLServerResultSet. La aplicación puede configurar el nivel de registro como FINER.
Controlador Registra mensajes en la clase SQLServerDriver. La aplicación puede configurar el nivel de registro como FINER.
Resistencia Registra los mensajes de la clase SQLServerConnection en relación solo con las reconexión de resistencia de conexión inactiva. La aplicación puede configurar el nivel de registro como FINE y FINER.
Redireccionamiento Registra los mensajes de la clase SQLServerConnection en relación solo con los reintentos abiertos de conexión. La aplicación puede configurar el nivel de registro como FINE.

Desde la versión 2.0 del controlador JDBC de Microsoft, el controlador también proporciona el paquete com.microsoft.sqlserver.jdbc.internals, que incluye la compatibilidad de registro con las siguientes categorías de registro interno.

Nombre Descripción
AuthenticationJNI Registra mensajes relativos a los problemas de autenticación integrada de Windows (cuando la propiedad de conexión authenticationScheme se establece de forma implícita o explícita en NativeAuthentication).

La aplicación puede configurar el nivel de registro como FINEST y FINE.
SQLServerConnection Registra mensajes en la clase SQLServerConnection. La aplicación puede configurar el nivel de registro como FINE y FINER.
SQLServerDataSource Registra mensajes en las clases SQLServerDataSource, SQLServerConnectionPoolDataSource y SQLServerPooledConnection.

La aplicación puede configurar el nivel de registro como FINER.
InputStream Registra mensajes relativos a los siguientes tipos de datos: java.io.InputStream, java.io.Reader y a los tipos de datos que tienen un especificador máximo, como varchar, nvarchar y los tipos de datos varbinary.

La aplicación puede configurar el nivel de registro como FINER.
SQLServerException Registra mensajes en la clase SQLServerException. La aplicación puede configurar el nivel de registro como FINE.
SQLServerResultSet Registra mensajes en la clase SQLServerResultSet. La aplicación puede configurar el nivel de registro como FINE, FINER y FINEST.
SQLServerStatement Registra mensajes en la clase SQLServerStatement. La aplicación puede configurar el nivel de registro como FINE, FINER y FINEST.
XA Registra mensajes para todas las transacciones XA de la clase SQLServerXADataSource. La aplicación puede configurar el nivel de registro como FINE y FINER.
KerbAuthentication Registra mensajes relativos a la autenticación Kerberos de tipo 4 (cuando la propiedad de conexión authenticationScheme se establece en JavaKerberos). La aplicación puede configurar el nivel de registro como FINE o FINER.
TDS.DATA Registra mensajes que contienen la conversación de nivel de protocolo TDS entre el controlador y SQL Server. Los contenidos detallados de cada paquete TDS enviado y recibido se registran en ASCII y como hexadecimales. No se registran las credenciales de inicio de sesión (nombres y contraseñas de usuarios). Todos los demás datos se registran.

Esta categoría crea mensajes muy detallados y solo se puede habilitar si se establece el nivel de registro en FINEST.
TDS.Channel Esta categoría realiza un seguimiento del canal de comunicaciones TDS con SQL Server. El mensaje registrado incluye la apertura y cierre de sockets, así como lecturas y escrituras. También realiza seguimientos de mensajes relacionados con el establecimiento de una conexión de Seguridad de la capa de transporte (TLS), antes conocida como Capa de sockets seguros (SSL), con SQL Server.

Esta categoría solo puede ser habilitada configurando el nivel de registro en FINE, FINER o FINEST.
TDS.Writer Esta categoría realiza un seguimiento de las escrituras en el canal TDS. Solo se hace un seguimiento de la longitud de las escrituras, no de los contenidos. Esta categoría también hace un seguimiento de los problemas que se producen cuando una señal de atención es enviada al servidor para cancelar la ejecución de una instrucción.

Esta categoría solo puede ser habilitada configurando el nivel de registro en FINEST.
TDS.Reader Esta categoría realiza un seguimiento de determinadas operaciones de lectura desde el canal TDS en el nivel FINEST. En el nivel FINEST, el seguimiento puede ser detallado. En los niveles WARNING y SEVERE, esta categoría realiza un seguimiento cuando el controlador recibe un protocolo TDS no válido antes de que el controlador cierre la conexión.

Esta categoría solo puede ser habilitada configurando el nivel de registro en FINER y FINEST.
TDS.Command Esta categoría hace un seguimiento de las transiciones de estado de bajo nivel y de otras informaciones asociadas a la ejecución de comandos TDS, como ejecuciones de instrucciones Transact-SQL, recuperaciones de cursores ResultSet, confirmaciones, etc.

Esta categoría solo puede ser habilitada configurando el nivel de registro en FINEST.
TDS.TOKEN Esta categoría registra solo los tokens de los paquetes TDS y es menos detallado que la categoría TDS.DATA. Solo se puede habilitar configurando el nivel de registro en FINEST.

En el nivel FINEST, esta categoría hace un seguimiento de los tokens TDS conforme son procesados en la respuesta. En el nivel SEVERE, esta categoría hace un seguimiento cuando encuentra un token TDS no válido.
SQLServerDatabaseMetaData Registra mensajes en la clase SQLServerDatabaseMetaData. La aplicación puede configurar el nivel de registro como FINE.
SQLServerResultSetMetaData Registra mensajes en la clase SQLServerResultSetMetaData. La aplicación puede configurar el nivel de registro como FINE.
SQLServerParameterMetaData Registra mensajes en la clase SQLServerParameterMetaData. La aplicación puede configurar el nivel de registro como FINE.
SQLServerBlob Registra mensajes en la clase SQLServerBlob. La aplicación puede configurar el nivel de registro como FINE.
SQLServerClob Registra mensajes en la clase SQLServerClob. La aplicación puede configurar el nivel de registro como FINE.
SQLServerSQLXML Registra mensajes en la clase interna SQLServerSQLXML. La aplicación puede configurar el nivel de registro como FINE.
SQLServerDriver Registra mensajes en la clase SQLServerDriver. La aplicación puede configurar el nivel de registro como FINE.
SQLServerNClob Registra mensajes en la clase SQLServerNClob. La aplicación puede configurar el nivel de registro como FINE.

Habilitar el seguimiento mediante programación

El seguimiento se puede habilitar mediante programación si se crea un objeto Logger y se indica la categoría que se va a registrar. Por ejemplo, el siguiente código muestra cómo habilitar el registro para las instrucciones SQL:

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

Para desactivar el registro en el código, use lo siguiente:

logger.setLevel(Level.OFF);

Para registrar todas las categorías disponibles, use lo siguiente:

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

Para deshabilitar el registro de una categoría específica, use lo siguiente:

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

Habilitar el seguimiento mediante el archivo logging.properties

Además, puede habilitar el seguimiento con el archivo logging.properties, que se encuentra en el directorio lib de la instalación de Java Runtime Environment (JRE) 8 o en la carpeta conf para Java 9 y superior. Este archivo se puede usar para establecer los valores predeterminados para los registradores y controladores que se usan al habilitar el seguimiento.

El siguiente ejemplo de configuración se puede usar en los archivos 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

Nota

Puede establecer las propiedades del archivo logging.properties con el objeto LogManager que forma parte de java.util.logging.

Consulte también

Diagnóstico de problemas del controlador JDBC