Subscribed unsubscribe Subscribe Subscribe

開発時のPlackのアクセスログフォーマットを指定する

perl

Plack::Middleware::AccessLogは、開発環境(PLACK_ENV=development)の場合、P::M::Lint や P::M::StackTrace とともに「オプションなしで」Plack::Runner によって自動で読み込まれる。つまりログのフォーマットが指定できない。

app.psgi で enable 'AccessLog', format => '...' としても、「自動で読み込まれるものとは別に」もう一つ P::M::AccessLog を読み込むことになるので、1度のリクエストでログが2回吐かれることになってしまう。

というわけで、PLACK_ENV=development でもデフォルトの Middleware を読み込まない俺俺plackup をこさえた。

plackup-without-default-mw (長い)

あとは app.psgi で好みのログフォーマットオプションをつけた上で P::M::AccessLog を enable してやればいい。

build {
    ($ENV{PLACK_ENV} eq 'development')
        ? enable 'AccessLog', format => 'common' # for dev
        : enable 'AccessLog';                    # for product
    enable 'Lint';
    enable 'StackTrace';
    ...

課題

ベストは「app.psgi で enable している Middleware については、Plack::Runner で自動で読み込まない」だと思うけれど、それをやるには意外といじるところが多くなりそうだったので、ひとまずここで放置している。