ログが主食のかぜぶろです。ログがないと生きて行けません。
ログと言えばLog::Miminal
ですが、Minimalと言いつつも様々な拡張がなされており、好みの使い方にたどり着くまでに少し時間がかかるようになってしまったなと作者自身うすうす感じております。そこでLog::Minimal
がもつ機能を分解し、アプリケーションの開発者にとって使いやすいログモジュール/メソッドを開発者自身で作りやすくしようという狙いのもと作ったのが、Log::StringFormatter
です
Log::StringFormatter
はLog::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'
stringf
、stringf($message:Str)
もしくはstringf($format:Str,@variables)
の形式で使います。$message
、@variables
に配列・ハッシュのリファレンス、オブジェクトが渡された場合は、適切にシリアライズし、文字列として返します。$format
はprintf
のフォーマット文字列です
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を毎回使わなくても良くなるし、一度使うともう元には戻れません。
どうぞご利用ください。ではでは