「君の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+αなミドルウェアを作っていたんだけど、どうみても単体の方が便利なので単独のモジュールにしてリリースしました。どうぞお試しください