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 }
試行錯誤続く。
次はこのあたりを試してみる。