java.util.loggingの出力の扱いをどうするか

java.util.loggingのログが出力されてStackdriver上でERRORログ扱いになってしまう(結果、ERRORレベルのログの中で重要度の高いログが埋もれてしまう)ことに対処したいと思っている。 今回のケースだと下記のライブラリが該当する。

GitHub - GoogleCloudPlatform/cloud-sql-jdbc-socket-factory

接続するだけで、

INFO: Connecting to Cloud SQL instance [xxxxxx:asia-northeast1:xxxxx] on IP [35.190.xxx.xx].

というようなログをERRORレベルで吐いてしまう。

LogManager.getLogManager.reset()

とすれば出なくなる。しかし全く出ないのもまずので、試行錯誤している。

下記のように実装してみた。

  val globalLogger = Logger.getLogger("com.google.cloud.sql.mysql.SocketFactory")
  globalLogger.setUseParentHandlers(false)
  globalLogger.getHandlers.foreach(h => {
    globalLogger.removeHandler(h)
    h.close()
  })
  globalLogger.addHandler(new StreamHandler(System.out, new CustomFormatter))

これを入れればでなくなるが、これを実行するタイミングが難しい。

CustomFormatterは下記のように実装している。

class CustomFormatter extends Formatter {
    override def format(record: LogRecord): String =
      s"""{
         |  "severity": "${record.getLevel}",
         |  "messsage": "(${record.getLoggerName}) ${formatMessage(record)}"
         |}
         |""".stripMargin.replace("\n", "") + CoreConstants.LINE_SEPARATOR
  }

試行錯誤続く。

次はこのあたりを試してみる。

アプリへのslf4j + logback 導入時の java.util.logging 向け対処 - Qiita