■質問日: |
2005/09/20 |
■最終更新日: |
2005/09/20 |
■質問内容: |
更新データのデータベースへの反映時に WDCが自動生成したINSERT/DELETE/UPDATEのSQLをログに出力したいのですが、 どのようにすればいいでしょうか? |
■回答内容: |
jp.co.tenartni.sql.SQLLoggerクラスを利用することで 追加、更新、削除時にWDCが生成したSQLをログに出力することが可能です。 ログ出力用の設定ファイルの例: log4j.category.jp.co.tenartni.sql.SQLLogger.update=DEBUG, SQL log4j.appender.SQL=org.apache.log4j.DailyRollingFileAppender log4j.appender.SQL.File=C:\\tmp\\helpdesk1_sql.log log4j.appender.SQL.layout=org.apache.log4j.PatternLayout log4j.appender.SQL.layout.ConversionPattern=%d %m%n log4j.appender.SQL.Threshold=DEBUG 先頭行を log4j.category.jp.co.tenartni.sql.SQLLogger=DEBUG, SQL とするとデータ取得時のSELECTのSQLもログに出力されます。 ログ出力用の設定ファイルの読み込みの例: ServletBase継承クラス public void init(ServletConfig config) throws ServletException { super.init(config); try { # ログ出力用の設定ファイルが/WEB-INF/properties/log4j.configの場合 File logFile = new File(this.getServletContext().getRealPath("/WEB-INF/properties/log4j.config")); if (logFile.exists()) { java.util.Properties props = new java.util.Properties(); props.put("LogManagerClassName", "jp.co.tenartni.log.log4j.Log4JManager"); props.put("LogConfigFileURL", "file:///" + logFile.toString()); LogManager.initialize(props, true); } } catch (Exception ex) { ex.printStackTrace(); } } 出力例: 2005-09-20 10:06:02,562 unknown: select c.EMPNO,c.ZEN,c.UPDT_DATE from TBL_INPUT c where c.EMPNO = '2918' 2005-09-20 10:06:02,562 unknown: 2005-09-20 10:06:06,953 unknown: UPDATE TBL_INPUT SET ZEN = :ZEN WHERE EMPNO = :@OLD@_EMPNO AND UPDT_DATE = :@OLD@_UPDT_DATE 2005-09-20 10:06:06,953 unknown: [1] ZEN: aaab 2005-09-20 10:06:06,953 unknown: [2] @OLD@_EMPNO: 2918 2005-09-20 10:06:06,953 unknown: [3] @OLD@_UPDT_DATE: 2004/04/03 14:11:43.123 2005-09-20 10:06:06,953 unknown: |
■添付資料: |
なし |