自分用です。プロトタイプ的なものをSinatraで作る機会が多いんだけど、いつもログ周りで一瞬引っかかるのでメモしておきます。なぜクラシックスタイルなのかといえば、普段手癖で小さなAPIを書くときにはだいたいクラシックスタイルで書くからです。
configure の中にまとめるのは趣味です。
config.ru
require './app.rb'
configure {
Dir.mkdir("log") unless File.exist?("log")
access_log = File.new("#{settings.root}/log/access.log","a+")
access_log.sync = true
use Rack::CommonLogger, access_log
error_log = File.new("#{settings.root}/log/error.log","a+")
error_log.sync = true
app_log = File.new("#{settings.root}/log/application.log","a+")
app_log.sync = true
app_logger = Logger.new(app_log)
before {
env["rack.errors"] = error_log
env["rack.logger"] = app_logger
}
}
run Sinatra::Application
rack.errors は「出力先」なのに対し、rack.loggerは「利用するロガー」である点がややこしいところです。まあそれを言ったら「アクセスログを出すとかエラー出力のキャプチャはSinatra側というよりHTTPサーバ側の都合だよね」的なものとかあれこれあるわけなんですが。