如何在persistence.xml中关闭eclipselink sql语句?

时间:2017-01-09 09:38:13

标签: java jpa logging eclipselink

我为 Spring 应用程序配置了 EclipseLink JPA 提供程序。唯一的问题是,它使用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 I的版本使用:

<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>

1 个答案:

答案 0 :(得分: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。这是最灵活的解决方案。

使用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