2017-01-09 39 views
0

我已配置EclipseLinkJPA供應商爲我的彈簧申請。唯一的問題是,它用SQL語句來監控控制檯。如何關閉在persistence.xml中記錄eclipselink sql語句?

這是我的persistence.xml配置:

<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="jpa-persistence" transaction-type="RESOURCE_LOCAL"> 
    <properties> 
     <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
     <property name="eclipselink.ddl-generation" value="create-or-extend-tables"/> 
     <property name="eclipselink.logging.level" value="INFO"/> 
     <property name="logging.level" value="INFO"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

我發現在互聯網上都eclipselink.logging.levellogging.level性能基準,但沒有人似乎工作。我使用的是slf4j,但我不認爲它是相關的,因爲我不需要通過slf4j路由SQL輸出,我只是想擺脫它。

我應該如何配置我的persistence.xml來停止SQL語句記錄?

的EclipseLink的版本我使用:

<dependency> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>eclipselink</artifactId> 
    <version>2.6.4</version> 
</dependency> 

這是我在我的Spring應用程序實例JPA:

<!-- Define EclipseLink JPA Vendor Adapter --> 
    <bean id="jpaVendorAdapter" 
    class="org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter"> 
    <property name="databasePlatform" 
     value="org.eclipse.persistence.platform.database.MySQLPlatform" /> 
    <property name="generateDdl" value="true" /> 
    <property name="showSql" value="false" /> 
    </bean> 

    <!-- Entity Manager Factory --> 
    <bean id="entityManagerFactory" 
    class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="jpa-persistence"></property> 
    <property name="jpaVendorAdapter" ref="jpaVendorAdapter" /> 
    </bean> 
+0

您使用Java EE應用程序? – davidxxx

+0

@davidxxx WAR部署在Tomcat上的WAR應用程序...沒有直接JEE –

+0

好的,謝謝。我剛剛做了一個答案。 – davidxxx

回答

0

這是一個的EclipseLink特定行爲(reference)。

的EclipseLink指出:

默認情況下,日誌輸出均進入到System.out或您的控制檯。

配置輸出記錄到文件中持久性單元 財產eclipselink.logging.file可以設置:

<property name="eclipselink.logging.file" value="output.log"/> 

的EclipseLink的日誌服務插件,能和幾個不同 記錄支持集成,包括java.util.logging。要 啓用java.util.logging中的持久性單元屬性 eclipselink.logging.logger可以設置:

總之,你有兩個解決方案:

  • 定義eclipselink.logging.file到避免污染控制檯。
    這是個快速入侵,但我個人並不使用這個解決方案,因爲它創建了多個日誌文件,並且使應用程序日誌更難讀。

  • 定義eclipselink.logging.logger。這是最靈活的解決方案。

With EclipseLink 2。5+,eclipselink.logging.loger可以指定:

自定義記錄

它實現 org.eclipse.persistence.logging.SessionLog

該解決方案的定製記錄器的完全限定類名您可以通過SLF4J登錄,並且還可以更好地自定義日誌。 下面是從GIT的example

JavaLogger

用途的java.util.logging

java.util.logging的API,以避免...

ServerLogger

集成了應用服務器的日誌

DefaultLogger

(默認)使用的EclipseLink的本地記錄,DefaultSessionLog

+0

好的我還不夠具體。問題在於Spring和這一行: 雖然保持'假',但bean是以'true'啓動的,並且來自persistence.xml的屬性被覆蓋。刪除線路解決了這個問題。 –

+0

我明白了。好:)我雖然只能在控制檯中禁用EclipseLink日誌記錄,但仍然保留在日誌文件中,正如您所說的「唯一的問題是,它使用SQL語句來監控控制檯」我認爲在開發/認證環境中啓用showSql l是一種很好的做法,因爲它允許注意查詢問題,例如n + 1問題或針對1個查詢執行的查詢過多。 – davidxxx