WebSphere (8.5.5) 不记录 OpenJPA
WebSphere (8.5.5) does not logging OpenJPA
我对记录 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"
Anton,很可能 log4j 配置在应用程序服务器中先前加载的组件之一中被覆盖。
弄清楚发生了什么的最好办法是更改服务器端的跟踪级别,专门针对具有正确跟踪级别字符串的开放式 JPA。
您可以导航以更改日志记录详细信息(按照图像上的面包屑)
并为打开的 JPA 使用跟踪字符串 (*=info: openjpa.Query=all: openjpa.jdbc_JDBC=all: openjpa.jdbc_SQL=all)。配置更改需要重新启动服务器。
首先,题外话:你的 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 文件中的跟踪设置将被忽略。这是因为当使用容器管理时,跟踪由 container/WAS 处理。为了解释这一点,请看这个文件:
特别是看到这个警告:
Avoid trouble: The openjpa.Log property is ignored if it is defined in a container-managed persistence unit that uses the persistence providers that are provided with the application server. In this case, you must use the standard trace specification for the application server.
如果您进入管理控制台,您可以设置跟踪输出的位置。但我不相信有一种方法可以从使用 WAS 跟踪更改为使用 log4j。当jpa provider在WAS中为运行时,jeeruntime组件接管了WAS的Trace和OpenJPA的Log接口之间的日志记录功能,因此infoCenter中的"Avoid trouble"语句和"trace specification for the application server"的引用。在 WAS 中,您将不得不使用跟踪规范,例如openjpa=all:JPA=all or openjpa.jdbc.SQL=all
,后者只会给你 SQL trace,前者是所有 JPA trace。最重要的是,当使用容器管理时,您将无法仅将 OpenJPA/JPA 跟踪重定向到单个文件。
如果您没有使用容器管理,那么这应该打印 SQL tract to file openjpa_ra.log:
<property name="openjpa.Log" value="SQL=TRACE, File=openjpa_ra.log" />
我会试试这个,而且只是这个.....我认为您添加到 'update' 的日志设置可能太复杂了。如果您不使用容器管理的持久性,则不涉及 WAS 日志记录,并且将采用日志设置。此外,您应该能够使用 Log4j。 Log4j 的使用记录在 OpenJPA 文档中:
http://openjpa.apache.org/builds/2.2.2/apache-openjpa/docs/manual#ref_guide_logging_log4j
希望对您有所帮助,如果您需要更多详细信息,请告诉我。
谢谢,
希思
我对记录 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"
Anton,很可能 log4j 配置在应用程序服务器中先前加载的组件之一中被覆盖。
弄清楚发生了什么的最好办法是更改服务器端的跟踪级别,专门针对具有正确跟踪级别字符串的开放式 JPA。
您可以导航以更改日志记录详细信息(按照图像上的面包屑)
首先,题外话:你的 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 文件中的跟踪设置将被忽略。这是因为当使用容器管理时,跟踪由 container/WAS 处理。为了解释这一点,请看这个文件:
特别是看到这个警告:
Avoid trouble: The openjpa.Log property is ignored if it is defined in a container-managed persistence unit that uses the persistence providers that are provided with the application server. In this case, you must use the standard trace specification for the application server.
如果您进入管理控制台,您可以设置跟踪输出的位置。但我不相信有一种方法可以从使用 WAS 跟踪更改为使用 log4j。当jpa provider在WAS中为运行时,jeeruntime组件接管了WAS的Trace和OpenJPA的Log接口之间的日志记录功能,因此infoCenter中的"Avoid trouble"语句和"trace specification for the application server"的引用。在 WAS 中,您将不得不使用跟踪规范,例如openjpa=all:JPA=all or openjpa.jdbc.SQL=all
,后者只会给你 SQL trace,前者是所有 JPA trace。最重要的是,当使用容器管理时,您将无法仅将 OpenJPA/JPA 跟踪重定向到单个文件。
如果您没有使用容器管理,那么这应该打印 SQL tract to file openjpa_ra.log:
<property name="openjpa.Log" value="SQL=TRACE, File=openjpa_ra.log" />
我会试试这个,而且只是这个.....我认为您添加到 'update' 的日志设置可能太复杂了。如果您不使用容器管理的持久性,则不涉及 WAS 日志记录,并且将采用日志设置。此外,您应该能够使用 Log4j。 Log4j 的使用记录在 OpenJPA 文档中:
http://openjpa.apache.org/builds/2.2.2/apache-openjpa/docs/manual#ref_guide_logging_log4j
希望对您有所帮助,如果您需要更多详细信息,请告诉我。
谢谢,
希思