是否有可能拦截所有DataNucleus的JDO SQL查询?

时间:2012-03-09 13:59:02

标签: java sql jdo datanucleus intercept

假设有一个可操作的Java应用程序使用DataNucleus的JDO实现来访问数据库,是否可以拦截对数据库进行的所有SQL查询?目的是对它们运行统计并保留日志/跟踪。

2 个答案:

答案 0 :(得分:4)

您可以通过启用DataNucleus.Datastore.Native类别轻松获取DataNucleus中所有SQL语句的日志(请参阅http://www.datanucleus.org/products/datanucleus/logging.html

JDO2 InstanceLifecycleListeners允许你拦截事件,但我不认为SQL语句会在那里可用......

您还可以在应用服务器上查找SQL分析工具。例如,GlassFish允许您将SQLTraceListener实现附加到连接池。见http://docs.oracle.com/cd/E18930_01/html/821-2418/giyck.html#giygg

答案 1 :(得分:0)

的Log4j

您可以将java.util.loggingLog4j与DataNucleus一起使用。我将讲述Log4j的配置。

  

log4j.properties

 Date {Thu May 07 2015 00:00:00 GMT+0700 (SE Asia Standard Time)}

最后一行为INFO或ALL分配一个级别阈值,以便查看所有DataNucleus日志。 DataNucleus使用一系列类别,并将所有邮件记录到这些类别。 See here了解更多详情。你可能需要

  • # Define the destination and format of our logging log4j.rootCategory=DEBUG, stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %t %c{1}:%M:%L - %m%n # DataNucleus Categories log4j.category.DataNucleus=ALL - 与查询相关的所有讯息
  • log4j.category.DataNucleus.Query - 所有常规数据存储消息
  • log4j.category.DataNucleus.Datastore - JDO的所有消息

log4j.category.DataNucleus.JDO是所有DataNucleus日志类别的根。

log4j添加到CLASSPATH。我使用Gradle进行依赖关系管理,所以这是我的构建脚本:

  

的build.gradle

log4j.category.DataNucleus

要在启动应用程序时提供Log4J配置文件,请将JVM参数设置为

configurations {
    all*.exclude group: "commons-logging", module: "commons-logging"
}

dependencies {
    // Logging
    compile 'org.slf4j:slf4j-api:1.7.+'
    runtime 'org.slf4j:slf4j-jdk14:1.7.+'
    runtime ('log4j:log4j:1.2.17') {
        exclude group: "com.sun.jdmk", module: "jmxtools"
        exclude group: "com.sun.jmx", module: "jmxri"
        exclude group: "javax.mail", module: "mail"
        exclude group: "javax.jms", module: "jms"
    }    
}

如果您在JavaEE应用程序服务器中运行,则可以为您完成此操作。或者,如果您使用的是Spring WebMVC,请将log4j.properties放在WEB-INF中,并将以下侦听器添加到Deployment描述符中。

  

的web.xml

-Dlog4j.configuration=file:log4j.properties