ひぃ(hixi)の技術雑記ブログ

事実や解決策というよりも自分が思ったことをつらつらと書いていく所存。文章構成とかそういうのあまり気にせずに書きます

Log::LTSV::Instance 作った

Log-LTSV-Instance-0.01 - LTSV logger - metacpan.org リリースしました。

my $logger = Log::LTSV::Instance->new(
    logger => sub { print @_ },
    level  => 'DEBUG',
);
$logger->crit(msg => 'hungup');
# time:2015-03-06T22:27:40        log_level:CRITICAL      msg:hungup

PODにある通りだけども、こんな感じで使えます。

my $logger = Log::LTSV::Instance->new(
    logfile => $filename,
);

見たくすると、 File::RotateLogs で動きます。

あー全部のログにuser_id(session_id)付けたいわーとかいう人はsticksを使いましょう。

$logger->sticks( session_id => sub { $c->session_id } );
$logger->crit(msg => 'hungup');
# time:2015-03-06T22:27:40      log_level:CRITICAL    session_id:1       msg:hungup
$logger->info(msg => 'hungup');
# time:2015-03-06T22:27:40      log_level:INFO    session_id:1      msg:hungup

こんな感じにsticksというメソッドを使うことで、必ず吐き出されるログも入れることができるので、ご活用下さい。

ちなみに、HASHREF や ARRAYREF、Object を渡したとしてもよしなに AutoDump してくれますので、ご安心下さい。

my $obj = bless { cval => 1 }, 'TEST';
$logger->crit(
    class    => $obj,
    hashref  => { hval => 1 },
    arrayref => [ 'a', 'b' ],
);
# time:2015-03-07T22:51:19        log_level:CRITICAL      class.cval:1    hashref.hval:1  arrayref.0:a    arrayref.1:b

TODO

  • AutoDumpしていいの?
  • caller情報を自動で吐き出すべき?

どうしよっかなーって思ったけど、とりあえずバージョン1を上げたのでした!