DataNucleusのJDOの実装を使用してデータベースにアクセスする操作可能なJavaアプリケーションがあると仮定すると、データベースに対して行われたすべてのSQL照会を代行受信できますか?その目的は、それらの統計を実行し、ログ/トレースを保持することです。すべてのDataNucleusのJDO SQLクエリを傍受することは可能ですか?
答えて
あなたは簡単に
JDO2 InstanceLifecycleListenersはあなたがイベントをインターセプトできるようになるが、私はSQLを考えていない(http://www.datanucleus.org/products/datanucleus/logging.htmlを参照)カテゴリDataNucleus.Datastore.NativeをオンにすることでDataNucleusのからのすべてのSQL文のログを取得することがあり文は
あなたはまた、SQLプロファイリングツールのためのアプリサーバーに見ることができます...が利用できるようになります。たとえば、GlassFishではSQLTraceListenerの実装を接続プールにアタッチできます。あなたはDataNucleusのでjava.util.loggingまたはLog4jを使用することができますhttp://docs.oracle.com/cd/E18930_01/html/821-2418/giyck.html#giygg
Log4jの
を参照してください。 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のログを見るためにINFOまたはALLにレベルのしきい値を割り当てます。 DataNucleusは一連のカテゴリを使用し、すべてのメッセージをこれらのカテゴリに記録します。詳細についてはSee hereをご覧ください。クエリ
log4j.category.DataNucleus.Datastore
に関連するすべてのメッセージ - - すべての一般的なデータストアのメッセージまたは
log4j.category.DataNucleus.JDO
- すべてのメッセージの一般的なJDOlog4j.category.DataNucleus
すべてのルートであるあなたは、おそらく
log4j.category.DataNucleus.Query
が必要DataNucleusログカテゴリ。は、あなたのCLASSPATHにlog4jを追加します。私は依存関係の管理のために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>