我为 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.level
和logging.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>
答案 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