読者です 読者をやめる 読者になる 読者になる

CodeReposに初import

perl coderepos

コミット権を頂いたので、開発中のモジュールを一個初importしました。
Perse::Syslog::Period
仕事柄、ログ(syslog)を解析することが多いのですが、期間を指定して解析できるものが見あたらなかったので作りました。自分で使ってみた限りでは便利だともう。
テスト全然書いてないんですが、とりあえず動きます。
ドキュメントも全然なので、簡単にSYNOPSIS的なものを書いておきます。

use Parse::Syslog::Period;

my $ps = Parse::Syslog::Period->new( '/var/log/hoge.$YEAR$MONTH$DAY',
    period => { between => [
        {year => 2008, month => 5 , day => 26 },
        {year => 2008, month => 6 , day => 1, hour => 5},
    ]},
);

while (my $sl = $ps->next) {
  ... access $sl->{timestamp|host|program|pid|text} ...
}

基本はこれだけ。Parse::Syslogに期間指定のパラメータが増えただけです。上の例では第一引数にsyslog-ngのマクロ文字を使ったファイル名を渡していますが、普通のローテート方式(hoge, hoge.1, hoge.2 ...)の場合は以下のように必要なパラメータが増えます。

my $ps = Parse::Syslog::Period->new( '/var/log/hoge',
	rotate           => 'daily'
	rotate_at        => {hour => 5, minute => 2},
	rotate_statefile => "/var/lib/logrotate.status", # optional

periodのbetween要素はDateTimeオブジェクトでもOK。あと他にこんな指定もできます。

period => 'today' # これがデフォ
period => { ymdh => { year => 2008, ... } }
period => { last => { (years|months|days|...) => NUM } }

parseモジュールを指定できる(デフォはParse::Syslog)ので、maillogをパースするときは以下のようにするといい感じ。

my $ps = Parse::Syslog::Period->new( '/var/log/maillog',
	parse_module => 'Parse::Syslog::Mail',

インスタンスメソッドとしてnext以外にgrepとかslurpってのも用意したけど、あんまり使わないかな。

へっぽこコードなので、不具合とか見つけたら、どんどんコミットしていただけると嬉しいです。
テストちゃんと書いたらCPANに上げようかと思う。