PHPerによるScala入門その4 ログ
ずいぶんと間が空いて4だけど気にしない。
ログ
Scalaで吐くApplication log. PHPだと最近はもうmonlog一択な印象を受ける。
テキトーにAkka Httpで作ったアプリケーションを動かしてると
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details
みたいなログが出てくることがある。 何も設定してないけど、Akkaがslf4jに依存してるのかな?
何も知識が無いのでぐぐってみると、
というStack Overflowがあったり、入門者は困るんじゃないかなという空気を感じた。 というかまずPlayで入門していろいろ学んだ方が効率良いんじゃないのか…?
ともあれ、Stack Overflowの中でもslf4jがデファクトっぽいのでとりあえずこれの使い方を見ていく。
slf4sもあるようだけど GitHub - w11k/slf4s: Simple Scala facade for SLF4J
とりあえずすでにログも出てるし4jで進めていく。
SLF4J
SLFってなんぞと思っていたけど、 Simple Log Facade
なのね。
さて見ていくかと思ったのだけど、LightbendがScala Loggingというのを出していた。SLF4Jベースらしいし、Akkaを使ってるしLightbendに依存していこうということでこっちで見ていく。
Scala Logging
logbackとscala loggingをlibraryDependenciesに追加して
com.typesafe.scalalogging.Logger("name").info(message)
もうこれだけでログが出ますね。かんたーん。
Logback
とりあえず使う分にはこれでいいのだけど、実際に調べたかったことはLogback. logback.xmlでなにかしらを設定すると何か変わる、ということは知ってるけど実際に何をどう設定するのか全然知らないので見てみる。
logback-test.xml, logback.groovy, logback.xml の順で読まれるらしい。classpath内に直接置いとけば勝手に読んでくれるよ、ということらしいけど、classpathとはどれのことを指してるんだろう…
The class path is the path that the Java runtime environment searches for classes and other resource files.
ふむ、なるほど… とりあえずresrouceに置いとくか。
内容は
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <logger name="chapters.configuration" level="INFO" /> <logger name="chapters.configuration.Foo" level="DEBUG" /> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration>
大体こんな感じになるとのこと。
- appender
- logger
- root
がある。rootは特別なloggerって感じかな。 appenderは出力方式を決めてるところに見える。 FILEに吐くなりSTDOUTに吐くなり。
logger, rootはfilterかな。
変数を使いたければpropertyで指定すればいいらしい。
なるほど、Logback完全に理解した()