ぽらろいどの日記

新しい知見を得たり、得られた知見を記録したり共有したりする場を予定しています。

MEMO|logback.xmlを使わないで、スクリプト内でファイル出力先の設定をする(slf4j + logback)

概要

logを取るためにslf4j + logbackを用いるが、xmlを利用せずにスクリプトのみでファイル出力先の設定を済ませたい。

以下の解答が見つかったので、メモ。

stackoverflow.com

利用

ついでにimportを補足すると、以下のような形になる(一度動作は確認したけど、最終的な確認してないので微調整は必要かもしれない)。

import ch.qos.logback.classic.encoder.PatternLayoutEncoder
import ch.qos.logback.classic.spi.ILoggingEvent
import ch.qos.logback.core.FileAppender

import org.slf4j.Logger
import org.slf4j.LoggerFactory

LoggerContext lc = LoggerFactory.getILoggerFactory()

PatternLayoutEncoder ple = new PatternLayoutEncoder()
ple.setPattern("%date %level [%thread] %logger{10} [%file:%line] %msg%n")
ple.setContext(lc)
ple.start()

FileAppender<ILoggingEvent> fileAppender = new FileAppender<>()
String logFile = "new.log"
fileAppender.setFile(logFile)
fileAppender.setEncoder(ple)
fileAppender.setContext(lc)
fileAppender.start()

Logger log = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)
log.addAppender(fileAppender)

log.info("message")

jarファイルを手動セットする場合、以下は少なくとも必要かな?

仕込む場所

ネット上の記事だと以下が参考になりそうだけど、ちょっとした動作記録なら好きに入れれば良いか。

dev.classmethod.jp

qiita.com