eclipselink.logging.file对我不起作用

时间:2012-05-15 06:00:00

标签: logging eclipselink

我在一个新项目中使用Eclipselink 2.3.0,该项目在Glassfish 3.1.2中部署在EAR文件中。

这些是我的persistence.xml中定义的所有属性:

<property name="eclipselink.target-database" value="MySQL"/>
<property name="eclipselink.logging.logger" value="DefaultLogger"/>
<property name="eclipselink.logging.file" value="\logs\eclipselink.log"/>
<property name="eclipselink.logging.level" value="FINEST"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.logging.timestamp" value="true"/>
<property name="eclipselink.logging.thread" value="true"/>
<property name="eclipselink.logging.session" value="true"/>
<property name="eclipselink.logging.exceptions" value="true"/>

除了eclipselink.logging.file之外,所有属性都按预期工作。它创建文件“\ logs \ eclipselink.log”,但它始终为空,并且日志输出转到stdout。

我已经尝试从DefaultLogger更改为JavaLogger,文件名也有其他方向斜线等等。我尝试的所有内容都会导致空日志文件,并且日志输出会转到stdout。

有关为何发生这种情况的任何想法?在我看来,EclipseLink正在正确读取属性,并创建文件,但某处输出被重定向到stdout。

P.S。 EAR项目中只有一个persistence.xml,这是Glassfish实例中部署的唯一项目。

4 个答案:

答案 0 :(得分:1)

从查看处理属性的代码来看,它似乎可能是一个错误。您使用的是托管或应用程序管理的持久性单元吗?

我的猜测是,如果您创建自己的DefaultSessionLog子类,将应用file属性。 您还可以尝试在SessionCustomizer中设置日志文件。

请记录错误。

答案 1 :(得分:0)

拿出一粒盐,我偷看了源头,但没有花时间完全“弄清楚”它。我遇到了同样的问题,这就是我发现的(这是没有运行GlassFish的单元测试,因此在这种情况下是Java SE)。

似乎DefaultLogger似乎只是登录到stdout。我认为代码只能处理一个编写器,也许stdout总是最后一个编写器集?

使用JavaLogger我最初发现它创建了eclipselink.logging.file文件,但没有记录任何内容。我认为这是因为创建了一个文件流并将其提供给JavaLogger,但它忽略了它。我认为它实际上只是将所有内容传递给java.util.logging系统。所以我需要做的是使用java.util.logging属性来控制输出文件名(通过java.util.logging.FileHandler)和日志记录量:

这是我的日志记录属性的一个子集(要传递到JVM或使用LogManager.getLogManager()手动加载.readConfiguration):

handlers= java.util.logging.FileHandler, java.util.logging.ConsoleHandler
java.util.logging.FileHandler.level = FINEST
java.util.logging.FileHandler.pattern = mylogfile%u.%g.log
java.util.logging.ConsoleHandler.level = FINEST
org.eclipse.persistence.default.level = FINE
org.eclipse.persistence.session.level = FINE

同样在我的persistence.xml文件中,我不再设置eclipselink.logging.file。

答案 2 :(得分:0)

  

此属性在Java SE环境中使用时适用。

来源:https://www.eclipse.org/eclipselink/documentation/2.5/jpa/extensions/p_logging_file.htm

对于Java EE应用程序,有“ ServerLogger”。

https://wiki.eclipse.org/EclipseLink/Examples/JPA/Logging#Server_Logging

答案 3 :(得分:-1)

通过更改库更改EclispeLink的版本或更改

<dependency>
        <groupId>org.eclipse.persistence</groupId>
        <artifactId>eclipselink</artifactId>
        <version>2.6.3</version>
        <scope>provided</scope>
</dependency>