LoginSignup
0
0

【SE入門編】【番外編】MybatisのSQL文をLOG4J2ログに出力する

Last updated at Posted at 2024-02-04

前書き

今回の記事は「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つファイルの設定が必要です。ファイルの位置は下図をご確認ください。

image.png

  • 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にアップロードしました、ぜひダウンロードして確認してください。

それではまた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0