前書き
今回の記事は「SE入門編」シリーズの一部です。完全版はこちらにあります:
今回の記事のソースはGithubにアップロードしております:
1. 前提条件
今回の記事は【番外編】となっており、MybatisとLOG4J2の知識があれば十分です。
Mybatisのログレベルの理解:
- ログレベル=DEBUG:実行されるSQL文やパラメータが出力される
- ログレベル=TRACE:SQL文の実行結果(検索データ、件数など)が出力される
ただし、既に本編で構築したソースの上に、SQL文をログに出力するように追加を設定したため、興味をお持ちの方は本編から着手してください。
2. 今回の記事で出来たこと
-
各トランザクションで発行されたSQL文をログ(コンソルやログファイル)に出力することが出来た
-
ログ出力レベルを変えるだけで、出力内容が変わることが出来た
-
ログ出力レベル=traceを設定した時に出力されたログ:DEBUG、TRACEのログが出力される(実際にはERROR、WARN、INFOも出力されるが、今回は例を作ってなかったです)
2024-02-04 10:53:38.088, [demo], [ DEBUG ], com.example.demo.repository.UserRepository.selectByPK, ==> Preparing: SELECT USER_ID, USER_NAME, PASSWORD, EMAIL, ROLE, TO_CHAR(LAST_LOGIN_DATE, 'YYYY/MM/DD HH24:MI:SS') LAST_LOGIN_DATE, LANG, DEL_FLG, DECODE(DEL_FLG, '1', 'Deleted', 'Active') DEL_FLG_TEXT, TO_CHAR(CREATE_DATE, 'YYYY/MM/DD HH24:MI:SS') CREATE_DATE, CREATE_USER, TO_CHAR(UPDATE_DATE, 'YYYY/MM/DD HH24:MI:SS') UPDATE_DATE, UPDATE_USER FROM USERS WHERE USER_ID = ?
2024-02-04 10:53:38.096, [demo], [ DEBUG ], com.example.demo.repository.UserRepository.selectByPK, ==> Parameters: ADMIN(String)
2024-02-04 10:53:38.103, [demo], [ TRACE ], com.example.demo.repository.UserRepository.selectByPK, <== Columns: USER_ID, USER_NAME, PASSWORD, EMAIL, ROLE, LAST_LOGIN_DATE, LANG, DEL_FLG, DEL_FLG_TEXT, CREATE_DATE, CREATE_USER, UPDATE_DATE, UPDATE_USER
2024-02-04 10:53:38.103, [demo], [ TRACE ], com.example.demo.repository.UserRepository.selectByPK, <== Row: ADMIN, システム 管理者, ADMIN, admin@test.com, ADMIN, 2024/02/03 21:19:32, en, 0, Active, 2023/12/31 17:15:58, ADMIN, 2023/12/31 17:15:58, ADMIN
- ログ出力レベル=debugを設定した時に出力されたログ:DEBUGのログが出力される、TRACEのログが出力されない(実際にはERROR、WARN、INFOも出力されるが、今回は例を作ってなかったです)
2024-02-04 11:00:30.454, [demo], [ DEBUG ], com.example.demo.repository.UserRepository.selectByPK, ==> Preparing: SELECT USER_ID, USER_NAME, PASSWORD, EMAIL, ROLE, TO_CHAR(LAST_LOGIN_DATE, 'YYYY/MM/DD HH24:MI:SS') LAST_LOGIN_DATE, LANG, DEL_FLG, DECODE(DEL_FLG, '1', 'Deleted', 'Active') DEL_FLG_TEXT, TO_CHAR(CREATE_DATE, 'YYYY/MM/DD HH24:MI:SS') CREATE_DATE, CREATE_USER, TO_CHAR(UPDATE_DATE, 'YYYY/MM/DD HH24:MI:SS') UPDATE_DATE, UPDATE_USER FROM USERS WHERE USER_ID = ?
2024-02-04 11:00:30.454, [demo], [ DEBUG ], com.example.demo.repository.UserRepository.selectByPK, ==> Parameters: ADMIN(String)
2024-02-04 11:00:30.456, [demo], [ DEBUG ], com.example.demo.repository.UserRepository.selectByPK, <== Total: 1
- ログ出力レベル=infoを設定した時、DEBUG、TRACEのログが出力されない(実際にはERROR、WARNも出力されるが、今回は例を作ってなかったです)
3. 実装(設定)
SQL文をLOG4J2ログに出力するには2つファイルの設定が必要です。ファイルの位置は下図をご確認ください。
- log4j2.xml:
name:リポジトリのJAVAファイル名を指定するか、リポジトリのフォルダ(package)を指定するか。JAVAファイル名を指定した場合、指定されたJAVAファイル名だけのSQL文を出力する、packageを指定する場合、指定されたpackageの全てリポジトリのSQL文を出力する
level: 設定したレベルよりも高いレベルのログが出力されるため、本番環境ではSQL文を出力することでレスポンスに影響が生じる可能性があり、そのためには通常 level="info" で設定されます。一方、テスト環境では debug か trace を設定することが一般的です。
<logger name="com.example.demo.repository" level="info" />
- mybatis-config.xml:ロギング実装をlog4j2で指定します
<setting name="logImpl" value="LOG4J2"/>
おわりに
プロジェクト全体のソースコードはGitHubにアップロードしました、ぜひダウンロードして確認してください。
それではまた。