Edited at
G*Day 15

groovy.sql.Sqlのログ制御

More than 1 year has passed since last update.

これはG* Advent Calendarの15日目の記事で、Groovyの小ネタです。

あと、Advent Calendar初参加記事です :innocent:



便利なgroovy.sql.Sqlクラス

Groovyには超絶便利なgroovy.sql.Sqlクラスがあるおかげで、DBを簡単にプログラムで扱うことができます。


でもこのクラスは

groovy.sql.Sqlクラスは、Groovyプログラムのログ出力にSlf4j+Log4j2を使っていたとしても、Log4j2とは別でログを出力してきます。

このため、例えばPKの一意制約エラーを利用した重複排除のコードを書いた場合、Sqlクラス内ではWARNINGとしてエラーメッセージを出力するようになっているため、Lo4j2でエラーレベルをERRORにしていても、発生の都度エラーメッセージがコンソールに出力されてしまいます。

想定の処理なのにエラーのようなメッセージがユーザに見えるのはよろしくないので、これは表示しないようにしたいですね。


解決策

Sql#newInstanceを実行してインスタンスを作る前に、以下の処理を入れることでログレベルを最高値に変更することができ、WARNINGを抑制することができます。

Sql.LOG.level = Level.SEVERE

たったこれだけで私が2年位悩んだ問題が解決しました :rolling_eyes:


じゃあ重大な障害が発生した場合は?

ログレベルをSEVEREにしているので、もちろん重大な障害が発生した場合はメッセージがコンソールに出力されてしまいます。

でも大丈夫です。

重大な障害なんて発生するわけ無いですよね :innocent: