2016-08-24 100 views
1

我对记录SQL语句感兴趣。我试过两种方法,用log4j2写入文件,都是徒劳的。WebSphere(8.5.5)不记录OpenJPA

我添加以下行persistence.xml

<property name="openjpa.Log" value="SQL=TRACE" /> 
<property name="openjpa.Log" value="File=openjpa_ra.log" /> 
<property name="openjpa.ConnectionFactoryProperties" value="PrintParameters=true" /> 

,我期待它写入文件,但什么都没有发生。在另一方面,当我指定

<property name="openjpa.Log" value="log4j" /> 

,而不是文件中的行,没有什么是我的log4j2文件的更改,尽管有配置的appender。

更新:我已经配置在persistence.xml如下:

  <property name="openjpa.Log" value="File=d:\openra_log.log, DefaultLevel=WARN, Runtime=INFO, Tool=INFO, SQL=TRACE"/> 

而现在的文件产生,但系我看到有只

INFO [Worker-370] openjpa.Tool - Enhancer running on type "class type" 

回答

1

安东行,有机会log4j配置在应用程序服务器中以前加载的组件中的一个中被覆盖。

找出正在发生的事情,最好的办法可能是更改服务器端的跟踪级别,专门用于使用正确的跟踪级别字符串打开JPA。

可以导航到更改日志记录详细信息(按照图像上的面包屑) Log Details和使用跟踪字符串开放JPA(* =信息:openjpa.Query =所有:openjpa.jdbc_JDBC =所有:openjpa.jdbc_SQL =所有)。配置中的更改将需要重新启动服务器。

+0

非常感谢您!我已经在运行时和配置选项卡上这样做了,但没有任何更改。仍然无法写入文件\日志。 – Anton

+0

您是否在服务器日志上的System out或System错误中看到任何解释log4j冲突的内容。你发现你的JPA登录系统了吗? –

+0

我已决定至少获得文件输出权。我已经成功地获得了一些输出,尽管它不完全是我想要的。 – Anton

2

首先,顺便说一句:你有这个在你的persistence.xml文件:

<property name="openjpa.Log" value="SQL=TRACE" /> 
<property name="openjpa.Log" value="File=openjpa_ra.log" /> 

这些只有一个会生效。也就是说,就像任何Java属性一样,它们不是累积的,OpenJPA不会合并这两个日志设置,而只会使用一个(可能是最后一个处理过的)。上述应结合这样的:

<property name="openjpa.Log" value="SQL=TRACE, File=openjpa_ra.log" /> 

接下来,让我在手回答你的问题:如果你正在使用容器管理的持久性(如@PersistenceContext),然后在你的persistence.xml文件的跟踪设置将被忽略。这是因为当使用容器管理时,跟踪由容器/ WAS处理。为了解释这一点,请看看这个文件:

http://www.ibm.com/support/knowledgecenter/en/SSEQTP_8.5.5/com.ibm.websphere.base.doc/ae/tejb_loggingwjpa.html

特别是看到这样的警告:

避免麻烦:openjpa.Log属性被忽略,如果它被定义在使用应用程序服务器提供的持久性提供程序的容器管理持久性单元中。在这种情况下,您必须使用应用程序服务器的标准跟踪规范。

如果您进入管理控制台,可以设置跟踪输出的位置。但我不相信有从WAS跟踪到log4j的方法。当jpa提供程序在WAS中运行时,jeeruntime组件接管WAS的Trace和OpenJPA的Log接口之间的日志记录功能,因此infoCenter中的“避免故障”语句和“应用程序服务器的跟踪规范”参考。在WAS中,您将不得不使用跟踪规范,例如openjpa=all:JPA=all or openjpa.jdbc.SQL=all,后者会给你只是SQL跟踪,前者全部是JPA跟踪。底线是,当使用容器管理时,您将无法仅将OpenJPA/JPA跟踪重定向到单个文件。

如果你不使用容器管理,那么这应该打印SQL道到文件openjpa_ra.log:

<property name="openjpa.Log" value="SQL=TRACE, File=openjpa_ra.log" /> 

我会尝试这一点,也只有这一点.....我想日志设置你添加到你的'更新'可能太复杂。如果您未使用容器管理的持久性,则不涉及WAS日志记录,并且将遵循日志设置。此外,你应该可以使用Log4j。使用Log4j是记录在这里的OpenJPA文档:

http://openjpa.apache.org/builds/2.2.2/apache-openjpa/docs/manual#ref_guide_logging_log4j

我希望这可以帮助,请让我知道,如果你需要更多的细节。

感谢,

希思

相关问题