Jettyでロギング
ロギングしましょう。
・Request Log
Jetty/Howto/Configure Request Logs - Eclipsepedia
これに書いてある通りです。
デフォルトでは、OFFなので、start.iniの
etc/jetty-requestlog.xml
のコメントアウトを外します。これで標準的なRequestのログが、logsに出力されます。
・Server Log
Tomcatだと、accessLogは、server.xml。STDOUTとSTDERRは、conf/logging.propertiesのcatalina.outだったと(たぶん)
Jettyでもcatalina.outと同じレベルのログが欲しければ、普通にリダイレクトすればいいと思います。
java -jar start.jar > console.log 2>&1
Tomcatの場合は、起動のbatやshで、logging.propertiesの設定からロギングしてますね。
ローテーションするのであれば、logrotateとかrotatelogsを使うんでしょうか。
実際のアプリケーションのロギングですが、
etcのファイル見ていると、jetty-logging.xmlなるファイルがある。ググる。
Jetty/Feature/Jetty Logging - Eclipsepedia
うん。これで出ることは出ますね。
Log4Jでロギングすると、yyyy_mm_dd.stderrout.logに出力されます。
まぁ、これでもローテーションもしてくれるし、足りるっちゃー足りるんですが、
どうやら時代は、slf4j + logbackらしいので、
Log4Jではなく、logbackでロギングします。
まず、ライブラリ
・logback-classic-1.0.1.jar
・logback-core-1.0.1.jar
・slf4j-api-1.6.4.jar
以下を、クラスパスが通っているディレクトリに置く。
スタンダードなのは、jetty.home/libか、WEB-INF/libでしょうか。
jetty.home/libにloggingってディレクトリ作って、start.iniのOPTIONSに設定するのもオシャレですね。
これで普通にロギング出来ます。
val logger = LoggerFactory.getLogger(getClass) logger.info("info") logger.debug("debug") logger.error("error")
ただ、このまま使うと、常にloggerを生成しなきゃいけないので、どうにかしたいなと。
ラッパー書いてる人がいました。
GitHub - w11k/slf4s: Simple Scala facade for SLF4J
こんな例Loggingtools in Scala | The point is missed
や
こんな例http://jectbd.com/?p=1545
もあったけど、トータルでslf4sがよい気がしました。Apache License2.0です。
あと、logback.xmlは、resourcesに置きます。
内容は、こちら参考にさせて頂きました。http://webtide.intalio.com/2011/08/sifting-logs-in-jetty-with-logback/
scalaにはthrows無いですが、当然、呼び出し元でcatch出来るので、
それなりにスッキリとロギング出来そうです。
また、scalaは、全て非チェック例外だそうです。