2017-01-09 33 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