Scala LiftでLogback | Pimp my Code. @wataru420

Pimp my Code. @wataru420

My name is Wataru Fukunaga.

Scala Liftでlogを細かく制御したい。みたいな場合、LiftのロギングフレームワークはSLF4Jなので、Log4jではなくLogbackを使うことにした。

SLF4JとLogbackに関してはこちらを参考に
http://d.hatena.ne.jp/yohjizzz/searchdiary?word=*[slf4j]

Liftでのロギングの書き方


何種類かの書き方があるが、代表的なものはこんな感じ。

hoge.scala #
//パターン1
trait MyService extends Logger {
  info("Creating MyService at %s".format(now))
}

//パターン2
trait MyService extends Loggable {
  logger.info("Creating MyService at %s".format(now))
}

//ロガーを指定する
trait MyService {
  val logger = Logger("forFile)
logger.info("Creating MyService at %s".format(now))
}

これでJettyを起動すると、標準出力に記述したログが出てくる。

pom.xmlに依存関係を追加


まずはLogback用の記述を追加する。

pom.xml #
<dependency>
  <groupId>ch.qos.logback</groupId>
  <artifactId>logback-classic</artifactId>
  <version>0.9.28</version>
</dependency>

これで準備完了。
あとは、細かい設定をしていく作業。

ogback.xmlの作成


logbackでは設定はlogback.xmlに書くと相場で決まっているが、liftの場合はdefault.logback.xmlを/propsに作成するのが一般的のようだ。

実際に下記のようなxmlを作成してみる。

default.logback.xml #
<configuration debug="true">
<appender name="STDOUT"
class="ch.qos.logback.core.ConsoleAppender">
<Target>System.out</Target>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>[%date],%msg%n</Pattern>
</layout>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<FileNamePattern>logs/app.%d{yyyy-MM-dd}.zip</FileNamePattern>
</rollingPolicy>
</appender>
<logger name="forfile">
<level value="INFO" />
<appender-ref ref="FILE" />
</logger>

<root>
<level value="INFO" />
<appender-ref ref="STDOUT" />
</root>
</configuration>

WARNレベルのログが標準出力に表示され、forFileのロガー指定のログは/logs/app.logに出力される。
またapp.logはデイリーでローテートされ、zipに圧縮される設定。

環境による設定の変更


logback.xmlは環境によって切り替えることができる。
基本的にpropsファイルと同様の方法で切り替えることができる。
http://d.hatena.ne.jp/perezvon/20090912/1252720173
上記のページにあるように
{run.mode}.{user}.{hostname}.logback.xml
{run.mode}.{user}.logback.xml
{run.mode}.{hostname}.logback.xml
{run.mode}.default.logback.xml

みたいなファイル名に設定し、JVMの起動オプションで-Drun.mode=productionのように指定してあげればOK。

便利だなー

Scalaスケーラブルプログラミング第2版
Scalaスケーラブルプログラミング第2版Martin Odersky Lex Spoon Bill Venners 羽生田 栄一

インプレスジャパン 2011-09-27
売り上げランキング : 5920


Amazonで詳しく見る