Plack::Middleware::AccessLog は Apacheライクなログが残せる便利ミドルウェアなんですが使う上で一つ注意点があります。

use Plack::Builder;

builder {
    enable "AccessLog", format => "combined";
    sub { die };
};

これで、500エラーのログが残ることを期待するかもしれませんが、実際は記録されません。

例外がMiddleware層を飛ばしてServerまで伝わる為で、何らかの形で例外を補足してあげる必要があります。

例えば、Plack::Middleware::HTTPExceptions

builder {
    enable "AccessLog", format => "combined";
    enable "HTTPExceptions";
    sub { die };
};

もしくは自前でMiddlewareを書く方法。

use Plack::Builder
use Try::Tiny

builder {
    enable "AccessLog", format => "combined";
    enable_if { ($ENV{PLACK_ENV} || '') ne 'development'} sub {
        my $app = shift;
        sub {
            my $env = shift;
            try {
                $app->($env);
            } catch {
                $env->{'psgi.errors'}->print($_);
                [500,['Content-Type'=>'text/plain'],['Internal Server Error']];
            }
        }
    };
    sub { die };
};

やってることはHTTPExceptionsとほぼ同じです

Middlewareを使う場合は、miyagawaさんのslideにも登場する。この図を思い浮かべるといいと思います。

pylons_as_onion.png

pylonsのドキュメントから転載です

このブログ記事について

このページは、Masahiro Naganoが2012年1月 6日 12:17に書いたブログ記事です。

ひとつ前のブログ記事は「そろそろSTFのデータベース運用についてひとこと言っておくか」です。

次のブログ記事は「Plack::Middleware::ReverseProxy でリモートホストを確認する理由」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

ウェブページ

OpenID対応しています OpenIDについて
Powered by Movable Type 4.27-ja