ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server Express Java EE運用ガイド(Java EE 6編)
FUJITSU Software

2.11.7 SQLログ機能

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

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

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

値(太字:省略値)

説明

eclipselink.logging.level.sql

FINE

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

CONFIG

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

INFO

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

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


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

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_2_0.xsd
               version="2.0">
    <persistence-unit name="com.company.my.pu">
      <jta-data-source>jdbc/myDatasource</jta-data-source>
      <properties>
        <property name="eclipselink.logging.level.sql" value="FINE"/>
      </properties>
    </persistence-unit>
  </persistence>

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

[#|2013-02-25T11:49:06.390+0800|FINE|glassfish3.1.1|org.eclipse.persistence.session.file:/C:/Interstage/F3FMisje6/var/domains/domain1/applications/eclipseLink-SQLLogWeb/WEB-INF/classes/_eclipseLink-SQLLogWeb.sql|_ThreadID=22;_ThreadName=Thread-2;ClassName=null;MethodName=null;|JPA0021: SQL statement=INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (?, ?, ?)
bind => [3 parameters bound]|#]
[#|2013-02-25T13:27:25.484+0800|WARNING|glassfish3.1.1|org.eclipse.persistence.session.file:/C:/Interstage/F3FMisje6/var/domains/domain1/applications/eclipseLink-SQLLogWeb/WEB-INF/classes/_eclipseLink-SQLLogWeb|_ThreadID=16;_ThreadName=Thread-2;|JPA0020: caught throwable
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.qualifier):
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLIntegrityConstraintViolationException: このステートメントは、ユニークまたは主キー制約、または 'DEPT' 上で定義された 'SQL120905104540510' によって識別されるユニーク索引において重複キー値の原因となる可能性があったため、打ち切られました。
Error Code: -1
Call: INSERT INTO DEPT (DEPTNO, DNAME, LOC) VALUES (1, 'dname', 'loc')
Query: InsertObjectQuery(com.pojo.Dept@51e658)

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

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

[EL Fine]: 2013-02-25 13:23:34.671--ClientSession(17912146)--Connection(238
30114) --JPA0021: SQL statement=select * from newdept  where deptno =?
        bind => [1 parameter bound]