7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PerlAdvent Calendar 2013

Day 1

Log::StringFormatter でログ文字列のフォーマット

Posted at

ログが主食のかぜぶろです。ログがないと生きて行けません。

ログと言えばLog::Miminalですが、Minimalと言いつつも様々な拡張がなされており、好みの使い方にたどり着くまでに少し時間がかかるようになってしまったなと作者自身うすうす感じております。そこでLog::Minimalがもつ機能を分解し、アプリケーションの開発者にとって使いやすいログモジュール/メソッドを開発者自身で作りやすくしようという狙いのもと作ったのが、Log::StringFormatterです

Log::StringFormatterLog::Minimalの文字列の整形部分を切り出して単独のモジュールにしたものです。

使い方

use Log::StringFormatter;
use Scalar::Util qw/dualvar/;
 
stringf('foo') -> 'foo'
stringf('%s bar','foo') -> 'foo bar'
stringf([qw/foo bar/]) -> ['foo','bar']
stringf('uri %s',URI->new("http://example.com/")) -> 'uri http://example.com/'
my $dualvar = dualvar 10, "Hello";
stringf('%s , %d', $dualvar, $dualvar) -> 'Hello , 10'

stringfstringf($message:Str)もしくはstringf($format:Str,@variables)の形式で使います。$message@variablesに配列・ハッシュのリファレンス、オブジェクトが渡された場合は、適切にシリアライズし、文字列として返します。$formatprintfのフォーマット文字列です

Log::StringFormatterを使ってログを出力するメソッドを書くと、

sub log {
    my($level, @args) = @_;

    if (@args) {
        $message = stringf @args;
    }

    my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) = localtime(time);
    my $time    = sprintf(
        "%04d-%02d-%02dT%02d:%02d:%02d",
        $year + 1900,
        $mon + 1, $mday, $hour, $min, $sec
    );
    my(undef, $file, $line) = caller(0);
    warn "[$time] [$$] [$level] $message at $file line $line.\n";
}

となります。カラーリングやログのレベルは自分好みで実装できますね!

自動でシリアライズ、Data::DumperやJSONを毎回使わなくても良くなるし、一度使うともう元には戻れません。

どうぞご利用ください。ではでは

7
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?