Plack::Middleware::Log::Minimal v0.01ではLog::Minimalのログ出力方法などの設定を一切できませんでしたが、v0.02でいくつか設定ができるようになりました。Log::Minimal v0.04でサポートした自動シリアライズも使えます。
まず、自動シリアライズの機能。
builder {
enable "Plack::Middleware::Log::Minimal", autodump => 1;
sub {
my $env = shift;
warnf("warning message");
["200",[ 'Content-Type' => 'text/plain' ],["OK"]];
};
};
このように、autodumpを設定すると、Log::Minimal::AUTODUMPが有効になります。
二つ目は、xaicronさんにpatchもらった、LOG_LEVEL。
builder {
enable "Plack::Middleware::Log::Minimal",
loglevel => 'WARN';
sub {
my $env = shift;
infof("information message"); #出力されない
warnf("warning message");
["200",[ 'Content-Type' => 'text/plain' ],["OK"]];
};
};
DEBUG,INFO,WARN,CRITICALとNONEが指定できます。NONEを指定すると何も出力されません。
最後は、formatter。ログを出力する前のhook的に使えます。
enable 'Log::Minimal',
formatter => sub {
my ($env, $time, $type, $message, $trace, $raw_message) = @_;
sprintf "%s [%s] [%s] %s at %s\n", $time, $type, $env->{REQUEST_URI}, $message, $trace;
});
formatterにはcoderefを指定します。PSGIのenv、時間、ログレベル、色付きメッセージ、トレース情報、色なしメッセージがcoderefに渡されるので、自由にカスタマイズできます。もし、multilogによるロギングをしていて、時間情報が必要ないなら、
formatter => sub {
my ($env, $time, $type, $message, $trace, $raw_message) = @_;
# [type] [uri] [pid] message at trace
sprintf "[%s] [%s] [%s] %s at %s\n", $type, $env->{REQUEST_URI}, $$, $raw_message, $trace;
});
のようにして消してしまえば良さそうです。この辺は環境変数のPLACK_ENVなどをみて、切り替えるとよさげかもしれません。出力方法を弄るだけではなく、ここでsyslogに飛ばすなどのこともできると思います。