Condividi tramite


Creazione di tracce

Il driver JDBC per Microsoft SQL Server supporta l'utilizzo di tracce (ovvero la registrazione) per consentire la risoluzione dei problemi relativi all'utilizzo del driver JDBC nelle applicazioni. Per abilitare l'utilizzo delle tracce, nel driver JDBC vengono utilizzate le API di registrazione in java.util.logging, da cui è disponibile un set di classi per la creazione degli oggetti Logger e LogRecord.

Nota

Per il componente nativo (sqljdbc_xa.dll) incluso nel driver JDBC, la creazione di tracce è abilitata grazie al framework Built-In Diagnostics (BID). Per informazioni sul BID, vedere Data Access Tracing in SQL Server 2005 (informazioni in lingua inglese).

Quando si sviluppa l'applicazione, è possibile eseguire chiamate a oggetti Logger che consentono di creare oggetti LogRecord i quali vengono quindi passati a oggetti Handler per l'elaborazione. Sia per gli oggetti Logger che per gli oggetti Handler vengono utilizzati i livelli di registrazione e, facoltativamente, i filtri di registrazione per definire quali LogRecords elaborare. Al termine delle operazioni di registrazione, con gli oggetti Handler possono facoltativamente essere utilizzati gli oggetti Formatter per pubblicare le informazioni sul log.

Per impostazione predefinita, l'output del framework java.util.logging viene scritto su un file. Tale file deve disporre di autorizzazioni di scrittura per il contesto su cui è in esecuzione il driver JDBC.

Nota

Per ulteriori informazioni sull'utilizzo dei vari oggetti di registrazione per la creazione di tracce dei programmi, vedere la documentazione Java Logging APIs (informazioni in lingua inglese) sul sito Web di Sun Microsystems.

Nelle sezioni seguenti sono descritti i livelli di registrazione e le categorie che è possibile registrare. Vengono inoltre fornite informazioni sull'abilitazione della creazione di tracce nell'applicazione.

Livelli di registrazione

A ciascun messaggio di log creato è associato un livello di registrazione. Tale livello determina l'importanza del messaggio. Il livello è definito dalla classe Level in java.util.logging. Se abilitata per un livello, la registrazione verrà abilitata per tutti i livelli superiori. In questa sezione vengono descritti i livelli di registrazione per le categorie di registrazione pubbliche e interne. Per ulteriori informazioni sulle categorie di registrazione, vedere la sezione Categorie di registrazione in questo argomento.

Nella tabella seguente sono descritti i vari livelli di registrazione disponibili per le categorie di registrazione pubbliche.

Nome Descrizione

SEVERE

Indica un problema grave. Si tratta del livello più elevato. Nel driver JDBC viene utilizzato per segnalare errori ed eccezioni.

WARNING

Indica un potenziale problema.

INFO

Fornisce messaggi informativi.

CONFIG

Fornisce messaggi sulla configurazione. Si noti che il driver JDBC non fornisce attualmente alcun messaggio sulla configurazione.

FINE

Fornisce informazioni di base sulle tracce, incluse tutte le eccezioni generate dai metodi pubblici.

FINER

Fornisce informazioni dettagliate sulle tracce, inclusi tutti i punti di ingresso e di uscita dei metodi pubblici con i tipi di dati dei parametri associati, nonché le proprietà pubbliche per le classi pubbliche. Fornisce inoltre parametri di input, parametri di output e valori restituiti del metodo ad eccezione dei tipi di valori restituiti CLOB, BLOB, NCLOB, Reader, <stream>.

FINEST

Fornisce le informazioni più dettagliate disponibili sulle tracce. È il livello più basso.

OFF

Disabilita la registrazione.

ALL

Abilita la registrazione di tutti i messaggi.

Nella tabella seguente sono descritti i vari livelli di registrazione disponibili per le categorie di registrazione interne.

Nome Descrizione

SEVERE

Indica un problema grave. Si tratta del livello più elevato. Nel driver JDBC viene utilizzato per segnalare errori ed eccezioni.

WARNING

Indica un potenziale problema.

INFO

Fornisce messaggi informativi.

FINE

Fornisce informazioni di base sulle tracce, incluse la creazione e l'eliminazione di oggetti di base. Fornisce inoltre tutte le eccezioni generate dai metodi pubblici.

FINER

Fornisce informazioni dettagliate sulle tracce, inclusi tutti i punti di ingresso e di uscita dei metodi pubblici con i tipi di dati dei parametri associati, nonché le proprietà pubbliche per le classi pubbliche. Fornisce inoltre parametri di input, parametri di output e valori restituiti del metodo ad eccezione dei tipi di valori restituiti CLOB, BLOB, NCLOB, Reader, <stream>.

Le seguenti categorie di registrazione erano incluse nella versione 1.2 del driver JDBC con il livello di registrazione FINE: SQLServerConnection, SQLServerStatement, XA e SQLServerDataSource. A partire dalla versione 2.0 sono state aggiornate al livello FINER.

FINEST

Fornisce le informazioni più dettagliate disponibili sulle tracce. È il livello più basso.

Le seguenti categorie di registrazione erano incluse nella versione 1.2 del driver JDBC con il livello di registrazione FINEST: TDS.DATA e TDS.TOKEN. A partire dalla versione 2.0 hanno mantenuto lo stesso livello di registrazione.

OFF

Disabilita la registrazione.

ALL

Abilita la registrazione di tutti i messaggi.

Categorie di registrazione

Quando si crea un oggetto Logger, è necessario indicare la categoria o l'entità denominata da cui si desidera ricevere le informazioni sul log. Il driver JDBC supporta le seguenti categorie di registrazione pubbliche, definite tutte nel pacchetto di driver com.microsoft.sqlserver.jdbc.

Nome Descrizione

Connection

Consente di registrare i messaggi nella classe SQLServerConnection. Le applicazioni possono impostare il livello di registrazione su FINER.

Statement

Consente di registrare i messaggi nella classe SQLServerStatement. Le applicazioni possono impostare il livello di registrazione su FINER.

DataSource

Consente di registrare i messaggi nella classe SQLServerDataSource. Le applicazioni possono impostare il livello di registrazione su FINE.

ResultSet

Consente di registrare i messaggi nella classe SQLServerResultSet. Le applicazioni possono impostare il livello di registrazione su FINER.

Driver

Consente di registrare i messaggi nella classe SQLServerDriver. Le applicazioni possono impostare il livello di registrazione su FINER.

A partire dalla versione 2.0, il driver Microsoft JDBC fornisce anche il pacchetto com.microsoft.sqlserver.jdbc.internals, che include il supporto per la registrazione per le seguenti categorie di registrazione interne.

Nome Descrizione

AuthenticationJNI

Consente di registrare i messaggi relativi ai problemi di autenticazione integrata di Windows.

Le applicazioni possono impostare il livello di registrazione su FINEST e FINE.

SQLServerConnection

Consente di registrare i messaggi nella classe SQLServerConnection. Le applicazioni possono impostare il livello di registrazione su FINE e FINER.

SQLServerDataSource

Consente di registrare i messaggi nelle classi SQLServerDataSource, SQLServerConnectionPoolDataSource e SQLServerPooledConnection.

Le applicazioni possono impostare il livello di registrazione su FINER.

InputStream

Consente di registrare i messaggi relativi ai tipi di dati java.io.InputStream e java.io.Reader, nonché ai tipi di dati per i quali è disponibile un identificatore max, ad esempio varchar, nvarchar e varbinary.

Le applicazioni possono impostare il livello di registrazione su FINER.

SQLServerException

Consente di registrare i messaggi nella classe SQLServerException. Le applicazioni possono impostare il livello di registrazione su FINE.

SQLServerResultSet

Consente di registrare i messaggi nella classe SQLServerResultSet. Le applicazioni possono impostare il livello di registrazione su FINE, FINER e FINEST.

SQLServerStatement

Consente di registrare i messaggi nella classe SQLServerStatement. Le applicazioni possono impostare il livello di registrazione su FINE, FINER e FINEST.

XA

Consente di registrare i messaggi per tutte le transazioni XA nella classe SQLServerXADataSource. Le applicazioni possono impostare il livello di registrazione su FINE e FINER.

TDS.DATA

Consente di registrare i messaggi contenenti la conversazione a livello di protocollo TDS tra il driver e SQL Server. Il contenuto dettagliato di ogni pacchetto TDS inviato e ricevuto viene registrato in formato ASCII ed esadecimale. Le credenziali di accesso (nomi utente e password) non vengono registrati. Tutti gli altri dati vengono registrati.

Questa categoria consente di creare messaggi molto dettagliati ed esaustivi e può essere abilitata solo impostando il livello di registrazione su FINEST.

TDS.Channel

Questa categoria consente di creare le tracce delle azioni del canale di comunicazione TCP con SQL Server. I messaggi registrati includono l'apertura e la chiusura di socket, nonché le operazioni di lettura e scrittura. Vengono inoltre create le tracce dei messaggi correlati alla definizione di una connessione SSL (Secure Socket Layer) con SQL Server.

Può essere abilitata solo impostando il livello di registrazione su FINE, FINER o FINEST.

TDS.Writer

Questa categoria consente di creare le tracce delle operazioni di scrittura nel canale TDS. Si noti che vengono create le tracce solo della lunghezza delle operazioni di scrittura e non del contenuto. Vengono inoltre create le tracce dei problemi quando al server viene inviato un segnale di attenzione per annullare l'esecuzione di un'istruzione.

Può essere abilitata solo impostando il livello di registrazione su FINEST.

TDS.Reader

Questa categoria consente di creare le tracce di alcune operazioni di lettura dal canale TDS con livello FINEST. Con tale livello le tracce possono risultare particolarmente dettagliate. Con i livelli WARNING e SEVERE questa categoria consente di creare le tracce quando il driver riceve un protocollo TDS non valido da SQL Server prima della chiusura della connessione.

Può essere abilitata solo impostando il livello di registrazione su FINER e FINEST.

TDS.Command

Questa categoria consente di creare le tracce delle transizioni di stato a basso livello e di altre informazioni associate all'esecuzione di comandi TDS, ad esempio le esecuzioni di istruzioni T-SQL, recuperi di cursori ResultSet, commit e così via.

Può essere abilitata solo impostando il livello di registrazione su FINEST.

TDS.TOKEN

Questa categoria consente di registrare solo i token dei pacchetti di flussi TDS e risulta meno dettagliata della categoria TDS.DATA. Può essere abilitata solo impostando il livello di registrazione su FINEST.

Con il livello FINEST questa categoria consente di creare le tracce dei token TDS quando vengono elaborati nella risposta. Con il livello SEVERE crea le tracce quando viene rilevato un token TDS non valido.

SQLServerDatabaseMetaData

Consente di registrare i messaggi nella classe SQLServerDatabaseMetaData. Le applicazioni possono impostare il livello di registrazione su FINE.

SQLServerResultSetMetaData

Consente di registrare i messaggi nella classe SQLServerResultSetMetaData. Le applicazioni possono impostare il livello di registrazione su FINE.

SQLServerParameterMetaData

Consente di registrare i messaggi nella classe SQLServerParameterMetaData. Le applicazioni possono impostare il livello di registrazione su FINE.

SQLServerBlob

Consente di registrare i messaggi nella classe SQLServerBlob. Le applicazioni possono impostare il livello di registrazione su FINE.

SQLServerClob

Consente di registrare i messaggi nella classe SQLServerClob. Le applicazioni possono impostare il livello di registrazione su FINE.

SQLServerSQLXML

Consente di registrare i messaggi nella classe SQLServerSQLXML interna. Le applicazioni possono impostare il livello di registrazione su FINE.

SQLServerDriver

Consente di registrare i messaggi nella classe SQLServerDriver. Le applicazioni possono impostare il livello di registrazione su FINE.

SQLServerNClob

Consente di registrare i messaggi nella classe SQLServerNClob. Le applicazioni possono impostare il livello di registrazione su FINE.

Abilitazione delle tracce a livello di programmazione

La creazione di tracce può essere abilitata a livello di programmazione creando un oggetto Logger e indicando la categoria da registrare. Il codice seguente, ad esempio, consente di abilitare la registrazione per le istruzioni SQL:

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

Per disabilitare la registrazione dal codice, utilizzare:

logger.setLevel(Level.OFF);

Per registrare tutte le categorie disponibili, utilizzare:

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

Per disabilitare una categoria specifica, utilizzare:

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

Abilitazione delle tracce utilizzando il file Logging.Properties

La creazione di tracce può inoltre essere abilitata utilizzando il file logging.properties, disponibile nella directory lib dell'installazione Java Runtime Environment (JRE). Il file può essere utilizzato per impostare i valori predefiniti degli oggetti logger e handler utilizzati una volta abilitate le tracce.

Di seguito è riportato un esempio delle impostazioni disponibili nei file logging.properties:

   # Specify the handlers to create in the root logger
   # (all loggers are children of the root logger).
   # The following creates two handlers.
   handlers = java.util.logging.ConsoleHandler, java.util.logging.FileHandler

   # Set the default logging level for the root logger.
   .level = OFF

   # Set the default logging level for new ConsoleHandler instances.
   java.util.logging.ConsoleHandler.level = FINE

   # Set the default logging level for new FileHandler instances.
   java.util.logging.FileHandler.level = OFF

   # Set the default formatter for new ConsoleHandler instances.
   java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

   # Set the default logging level for the logger named ConnectionPool.
   ConnectionPool.level = OFF

Nota

Per impostare le proprietà nel file logging.properties è possibile utilizzare l'oggetto LogManager, parte di java.util.logging.

Vedere anche

Altre risorse

Diagnosi dei problemi relativi al driver JDBC