「君のPSGIファイルを僕のミドルウェアでいっぱいにしたい」という台詞を思いついたけど使い道がない kazeburo です

似たようなログ記録モジュールはCPANにいくつかあるんだけど、File::RotateLogsっていうのを書いてCPANにあげました

https://metacpan.org/release/File-RotateLogs

特徴は以下の通り

  • strftimeベースのファイル名生成
  • 秒数指定のrotation
  • rotation時に最新のファイルへのsymlink
  • 古いログはforkしてバックグラウンドで削除

使い方

Proclet と組み合わせると

my $app = builder {
    enable 'AccessLog';
    $app;
};
my $rotatelogs = File::RotateLogs->new(
    logfile => '/path/to/app_log.%Y%m%d%H%M',
    linkname => '/path/to/app_log',
    rotationtime => 3600,
    maxage => 86400,
);
my $proclet = Proclet->new(
    logger => sub { $rotatelogs->print(@_) },
);
$proclet->service(
    code => sub {
        my $loader = Plack::Loader->load(
            'Starlet',
            port => 5432,
            max_workers => 4,
        );
        $loader->run($app);
    },
    tag => 'web'
);
$proclet->service(
    code => sub {
        $worker->run
    },
    tag => 'worker'
);
$proclet->run;

これで1日分のworkerとwebサーバのログを記録しておけるし、tail -F /path/to/app_log だけでログをずっと追いかけて行く事ができます。

このモジュール、始めはPlack::Middleware::AxsLogというAccessLog+αなミドルウェアを作っていたんだけど、どうみても単体の方が便利なので単独のモジュールにしてリリースしました。どうぞお試しください

このブログ記事について

このページは、Masahiro Naganoが2012年8月31日 16:34に書いたブログ記事です。

ひとつ前のブログ記事は「ProcletでSTDOUT/STDERRにサービス名を追加して表示できるようになったよー」です。

次のブログ記事は「やったー PerlでProcfileベースのプロセス管理ツール foreman の互換コマンド "proclet" できたよ」です。

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

ウェブページ

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