ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Java EE運用ガイド

3.8.8 SQLログ機能

JPAの機能を使用しているアプリケーションの調査やチューニングでInterstage永続性プロバイダが発行しているSQL文を確認するため、SQLログ機能を使用できます。SQLログを使用すると、Interstage永続性プロバイダはSQL文を発行する時に、またはSQL文の発行時に例外が発生するときに、SQL文と動的パラメタをログに出力します。

SQLログは、以下の永続性ユニットプロパティにより設定します。

永続性ユニットプロパティ名

値(太字:省略値)

説明

toplink.logging.level.sql

FINE

SQL文をサーバーログに出力します。

CONFIG

例外が発生する場合だけSQL文をサーバーログに出力します。

INFO

SQL文をサーバーログに出力しません。

値は、大文字と小文字を区別しません。


永続性ユニットプロパティをdeployment descriptor (persistence.xml)、またはエンティティマネージャファクトリの取得時にjavax.persistence.PersistenceのcreateEntityManagerFactory(String, Map)メソッドに指定します。

SQLログの設定例を以下に示します。

  <persistence xmlns="http://java.sun.com/xml/ns/persistence"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
                   http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
               version="1.0">
    <persistence-unit name="com.company.my.pu">
      <jta-data-source>jdbc/myDatasource</jta-data-source>
      <properties>
        <property name="toplink.logging.level.sql" value="FINE"/>
      </properties>
    </persistence-unit>
  </persistence>

FINEを指定した場合のサーバーログへのSQLログ出力例を以下に示します。

[05/12/2007 16:20:19.155 +0900] ISJEE: INFO: ISJEE_JPA0021: SQL statement=INSERT INTO
 CUSTOMER (ID, NAME) VALUES (?, ?)
 bind => [1, Tarou]: ThreadID=21,ThreadName=p
[05/12/2007 16:20:19.358 +0900] ISJEE: INFO: ISJEE_JPA0021: SQL statement=INSERT INTO
 CUSTOMER (ID, NAME) VALUES (?, ?)
 bind => [4, Jirou]: ThreadID=21,ThreadName=p
[05/12/2007 16:20:19.374 +0900] ISJEE: WARNING: ISJEE_JPA0020: Local Exception Stack: 
Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build SNAPSHOT (02/26/2008))):
 oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: [SymfoWARE ODBC Driver][SymfoWARE Server]
 JYP2079E 一意性制約に違反しました.
Error Code: -2079
Call: INSERT INTO CUSTOMER (ID, NAME) VALUES (?, ?)
 bind => [4, Jirou]
Query: InsertObjectQuery(entity.Customer@d209fb)

本機能をJava SEスタンドアローンアプリケーションで使用する場合、本プロパティを、Java VMオプションとして設定できます。Java VMオプションとcreateEntityManagerFactoryメソッドの両方に指定した場合、createEntityManagerFactoryメソッドに指定した設定を優先します。

Java SE環境のSQLログ出力例を以下に示します。

[TopLink Fine]: 2008.01.14 05:24:49.125--ClientSession(25709120)--Connection(127
74933)--JPA0021: SQL statement=SELECT ID, NAME FROM CUSTOMER WHERE (NAME = ?)
        bind => [Tarou]