我对记录SQL语句感兴趣。我尝试了两种方法,使用log4j2并写入文件,都是徒劳的。
我已将以下行添加到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" />
而不是文件行,尽管配置了appender,但我的log4j2文件没有任何变化。
更新:我在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"
答案 0 :(得分: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会处理跟踪。要解释这一点,请查看此文档:
请特别注意此警告:
避免麻烦:如果在使用应用程序服务器提供的持久性提供程序的容器管理持久性单元中定义openjpa.Log属性,则忽略该属性。在这种情况下,您必须使用应用程序服务器的标准跟踪规范。
如果您进入管理控制台,则可以设置跟踪输出的位置。但我不相信有一种方法可以将WAS跟踪改为log4j。当jpa提供程序在WAS中运行时,jeeruntime组件接管WAS的Trace和OpenJPA的Log接口之间的日志记录功能,因此&#34;避免麻烦&#34; infoCenter中的语句和应用服务器&#34;的跟踪规范的引用。在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
我希望这有帮助,如果您需要更多详细信息,请与我们联系。
谢谢,
希斯
答案 1 :(得分:1)