MojoliciousをCGIで実行すると、こんな感じで、詳細なログが、ApacheのErrorLogに書き出される。
[Wed Apr 2 08:43:56 2014] [debug] Your secret passphrase needs to be changed!!!
[Wed Apr 2 08:43:56 2014] [debug] GET "/".
[Wed Apr 2 08:43:56 2014] [debug] Routing to a callback.
[Wed Apr 2 08:43:56 2014] [debug] Rendering template "index.html.ep" from DATA section.
[Wed Apr 2 08:43:56 2014] [debug] 200 OK (0.004035s, 247.831/s).
こんなのあらゆる正常なアクセスでErrorLogに書き込まれてたらErrorLogのファイルが肥大化してしまって仕方ないので、これを抑制する方法を探した。
ログの抑制1:log ディレクトリを作る
app.cgiと同じ場所に log というディレクトリを作れば、そこにログが書き込まれる様になります。手っ取り早いといえば手っ取り早い
ログの抑制2:modeを production にする
Mojoliciousのコードはコードの最後に app->start() ないしは $app->start() とやるので、この直前に、このアプリケーションはproduction(完成品)ですよーという旨を記述してやる。
app->mode('production');
app->start();
これで細かいログはでなくなる。これをやると後述するlog levelが info になるよう。
http://mojolicio.us/perldoc/Mojolicious#mode
The operating mode for your application, defaults to a value from the MOJO_MODE and PLACK_ENV environment variables or development. Right before calling "startup", Mojolicious will pick up the current mode, name the log file after it and raise the log level from debug to info if it has a value other than development.
デフォルトは「 development 」で、startupの直前にどのモードかの判定が行われる。
ログの抑制3:mode level を 引き上げる
2番で書いたやりかたをもっと直接的にやってしまう。
app->log->level('warn');
app->start();
とか。
http://mojolicio.us/perldoc/Mojo/Log#level
Active log level, defaults to debug. Available log levels are debug, info, warn, error and fatal, in that order. Note that the MOJO_LOG_LEVEL environment variable can override this value.
ログレベルは以下の5つ。
- debug (デフォルト)
- info
- warn
- error
- fatal
それぞれがどの水準のログを吐くのかは・・・どこにかいてあるんだろう。まあその名前からだいたい想像はできる