Sinatra で Logger

ロガーを使おうと思い

use Rack::CommonLogger

という行を追加すると、アクセスログが 2 つ出力された。Sinatra 内で Rack::CommonLogger が use されているようだ。

use Rack::CommonLogger, Logger.new('myapp.log')

こんな風にすると myapp.log というファイルができて(これは Logger が作っているのだけど)、そこにもアクセスログが出力される。
デフォルトで出力されるログを止めるには

set :logging, false

と書けばOK。ただし、この方法は shotgun を使わない場合で有効。shotgun を使ってサービスを立ち上げている場合は、この方法ではログは止まらなかった。
shotgun を使う場合は実行環境を production にすることで止められる。production で動作させるには -E オプションで環境を指定する。":production" の先頭部分の ":" は必須。

% shotgun -E :production myapp.rb 

production 環境でアクセスログを出力したい場合は CommonLogger を use すればOK。development 環境での止め方はわからなかった。

アクセスログじゃなくって、開発時のログやアプリのログを出力したい場合はどうすればいいのだろう。標準添付ライブラリの Logger オブジェクトを使って出力するのが妥当かな。