假设有一个使用DataNucleus的JDO实现访问数据库的可操作Java应用程序,是否可以拦截对数据库进行的所有SQL查询?目的是对它们运行统计并保存日志/跟踪。是否可以拦截所有DataNucleus的JDO SQL查询?
1
A
回答
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
0
的Log4j
您可以使用java.util.logging或Log4j通过DataNucleus。我要讲述Log4j配置。
log4j.properties
# 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
最后一行分配水平阈值信息或所有这些都是为了看到所有DataNucleus将日志。 DataNucleus使用一系列类别,并将所有消息记录到这些类别。 See here了解更多详情。你可能需要
log4j.category.DataNucleus.Query
- 所有的信息与查询log4j.category.DataNucleus.Datastore
- 所有通用的数据存储信息
或log4j.category.DataNucleus.JDO
- 所有信息一般到JDO
log4j.category.DataNucleus
是一切的根DataNucleus日志类别。
将log4j添加到您的CLASSPATH。我用Gradle依赖管理,所以这里是我的构建脚本:
的build.gradle
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"
}
}
要启动时,您的应用程序设置JVM参数作为
提供一个Log4j配置文件-Dlog4j.configuration=file:log4j.properties
如果您在JavaEE应用程序服务器中运行,可以为您完成此操作。或者,如果您使用的是Spring WebMVC,请在WEB-INF中放置log4j.properties,并将以下侦听器添加到您的部署描述符中。
的web.xml
<!-- The definition of the Log4j Configuration -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/log4j.properties</param-value>
</context-param>
相关问题
- 1. 是否可以拦截READ操作?
- 2. 在JDO/DataNucleus中,我可以查询Joda-Time DateTime对象吗?
- 3. 拦截所有EF6 Linq查询
- 4. 使用JDO,是否可以查询实现特定接口的所有对象?
- 5. 是否可以拦截Documentum API调用?
- 6. 用于Java的SQL JDBC拦截器,可以跟踪可疑的SQL查询
- 7. 是否可以拦截/覆盖页面中的所有点击事件?
- 8. LINQ到SQL查询拦截器
- 9. 是否可以使用unity 3.0拦截私有方法?
- 10. JDO - datanucleus - HSQL错误
- 11. 是否可以拦截ActionScript 3中的属性获取/设置?
- 12. 是否可以剖析SQLite SQL查询?
- 13. JPA或查询拦截
- 14. 拦截Hibernate标准查询
- 15. nhibernate拦截选择查询
- 16. 是否可以重试我拦截的XMLHttpRequest?
- 17. Datanucleus(JDO)的Tomcat JNDI资源
- 18. 拦截所有通知 - UWP
- 19. 拦截所有服务
- 20. 是否可以拦截Android应用程序中的电话?
- 21. 是否可以拦截rebol的控制台错误?
- 22. 是否可以在Windows Mobile上拦截传出的SMS消息?
- 23. 是否可以拦截IIS下的Web请求?
- 24. EF代码第一次拦截OWIN User.Identity到所有查询
- 25. 如何拦截所有WordPress查询并限制到类别?
- 26. 以下SQL查询是否有效?
- 27. WCF查询拦截器:此MSDN是否存在安全风险?
- 28. 故障排除DataNucleus将JDO
- 29. 是否可以在我的所有AJAX查询中使用POST
- 30. SQL查询是否可以提供ColdFusion可以使用的值?