Log::MinimalでPerlのログ出力してみた


インストール方法


>$ cpanm install Log::Minimal

ログレベル

レベル 対象者 内容
debug 開発者 開発中のデバッグ用出力。商用環境では出力しない。
info 開発者 開発者が運用中に調査等で参照する情報。不具合を見つけるための手がかりに使用。
warn 運用者/開発者 運用中に発生したシステムに関する問題。直ちには問題がない状態。
critical 運用者/開発者 サービスが継続できない障害。原因究明の情報

表示例

log.test.pl
use Log::Minimal;

# デバッグを出力する場合:1
$ENV{LM_DEBUG} = 1;

debugf( 'デバッグレベル出力される.' ); # $ENV{LM_DEBUG} がtrueの場合出力される
infof( 'インフォレベルが出力される.' );
warnf( 'ワーニングレベルが出力される.' );
critf( 'クリティカルレベルが出力される.' );

# フルスタックトレースをする場合
debugff( 'デバッグレベル出力される.' ); # $ENV{LM_DEBUG} がtrueの場合出力される
infoff( 'インフォレベルが出力される.' );
warnff( 'ワーニングレベルが出力される.' );
critff( 'クリティカルレベルが出力される.' ); 

# パラメータを設定する場合
debugf( 'This is %s', 'debug log.' ); # $ENV{LM_DEBUG} がtrueの場合出力される
infof( 'This is %s', 'information log.' );
warnf( 'This is %s', 'warning log.' );
critf( 'This is %s', 'critical log. ' );

実行結果


2015-04-24T00:11:32 [DEBUG] デバッグレベル出力される. at log.test.pl line 6
2015-04-24T00:11:32 [INFO] インフォレベルが出力される. at log.test.pl line 7
2015-04-24T00:11:32 [WARN] ワーニングレベルが出力される. at log.test.pl line 8
2015-04-24T00:11:32 [CRITICAL] クリティカルレベルが出力される. at log.test.pl line 9
2015-04-24T00:11:32 [DEBUG] デバッグレベル出力される. at log.test.pl line 12
2015-04-24T00:11:32 [INFO] インフォレベルが出力される. at log.test.pl line 13
2015-04-24T00:11:32 [WARN] ワーニングレベルが出力される. at log.test.pl line 14
2015-04-24T00:11:32 [CRITICAL] クリティカルレベルが出力される. at log.test.pl line 15
2015-04-24T00:11:32 [DEBUG] This is debug log. at log.test.pl line 18
2015-04-24T00:11:32 [INFO] This is information log. at log.test.pl line 19
2015-04-24T00:11:32 [WARN] This is warning log. at log.test.pl line 20
2015-04-24T00:11:32 [CRITICAL] This is critical log.   at log.test.pl line 21

シリアライズ

log.test.pl
use Log::Minimal;

my $info = {
    id   => 100,
    name => 'user_name',
    mail => 'mail_address'
};
local $Log::Minimal::AUTODUMP = 1;
infof( 'info:%s', $info );

実行結果


2015-04-21T23:59:59 [INFO] info:{'id' => 100,'mail' => 'mail_address','name' => 'user_name'} at log.test.pl line 9

ログフォーマットの変更

log.formatter.pm
package Log::Minimal;

$Log::Minimal::PRINT = sub {
    my ( $time, $type, $message, $trace, $raw_message ) = @_;
    print "$time ", ( $FORMAT->{$type}||"[$type] - " ), " $message at $trace\n";
};

1;

log.test.pl
use Log::Minimal;

require './log.formatter.pm';

infof( "フォーマット変更したよ" );

};

実行結果


2015-04-24T00:06:01 [INFO] -  フォーマット変更したよ at test.log2.pl line 5

ログ出力先の変更

output.pm
package Log::Minimal;

my $fh;

open ( $fh, '>>', 'application.log' );
local $SIG{ HUP } = sub {
    undef $fh;
    open ( $fh, '>>', 'application.log' );
};

$Log::Minimal::PRINT = sub {
    my ( $time, $type, $message, $trace, $raw_message ) = @_;
    print $fh "$time ", ( $FORMAT->{$type}||"[$type] - " ), " $message at $trace\n";
};

1;
test.pl
use Log::Minimal;

require './output.pm';

infof("出力先変更");
application.log
2015-04-24T00:30:47 [INFO] -  出力先変更 at test.pl line 5