m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

Perlでログの確認

アプリケーションログ

処理中になんの処理を行ったかを確認するのでログを出力する方法を調査

一番しょぼい方法

warnを使用する
#!/usr/bin/env perl

use strict;
use warnings;

# logテスト
warn "log test";

warn "log test2";


warn "log test3";
結果
[root@localhost log]# perl sample01.pl
log test at sample01.pl line 7.
log test2 at sample01.pl line 9.
log test3 at sample01.pl line 12.
[root@localhost log]#

とりあえず、最低限時間とログのレベルなどは欲しいので項目を追加

情報加工
#!/usr/bin/env perl

use strict;
use warnings;

# logテスト
log_output("INFO", "sample test1");

log_output("INFO", "sample test2");

log_output("WARN", "sample warning test1");

# ログ
sub log_output{

    my ($level, $message) = @_;        # ログの指定レベルとメッセージを引数として取得
    my ($pkg, $file, $line) = caller;  # 呼び出し元の情報を取得
    my @time = localtime;              # 時間

    my $output = sprintf(
        "%04d-%02d-%02d %02d:%02d:%02d [%s] %s %s line %d.\n",
        $time[5] + 1900,
        $time[4]+1,
        $time[3],
        $time[2],
        $time[1],
        $time[0],
        $level,
        $message,
        $file,
        $line
    );

    warn $output;


}
確認2
[root@localhost log]# perl sample02.pl
2013-12-04 06:46:51 [INFO] sample test1 sample02.pl line 7.
2013-12-04 06:46:51 [INFO] sample test2 sample02.pl line 9.
2013-12-04 06:46:51 [WARN] sample warning test1 sample02.pl line 11.
[root@localhost log]#

さっきよりはまともになりました。

log4perl

cpanmでインストール
[root@localhost log]# cpanm Log::Log4perl
[root@localhost log]#
confファイル編集(log4perl.conf)
log4perl.logger.develop         = DEBUG, Screen
log4perl.appender.Screen        = Log::Log4perl::Appender::Screen
log4perl.appender.Screen.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.Screen.layout.ConversionPattern = %d [%p] %m %F at %L.%n
スクリプト
#!/usr/bin/env perl

use strict;
use warnings;

# 宣言
use Log::Log4perl;

# conf
Log::Log4perl::init("./log4perl.conf");

# logger
my $logger = Log::Log4perl->get_logger('develop');

# ログ出力
$logger->debug("sample test1");
$logger->warn("sample test2");
$logger->fatal("sample test3");
結果
[root@localhost log]# perl sample03.pl
2013/12/04 07:03:25 [DEBUG] sample test1 sample03.pl at 16.
2013/12/04 07:03:25 [WARN] sample test2 sample03.pl at 17.
2013/12/04 07:03:25 [FATAL] sample test3 sample03.pl at 18.
[root@localhost log]#

まとめ

自作することもcpanmパッケージでも可能なことがわかった。
なんか他にも「Log::Dispatch」などもあるがなんかやること多い感じがするので「Log::Log4perl」で対応する
ファイルに出力する方法なども調査する

参考

Perl徹底攻略 (WEB+DB PRESS plus)

Perl徹底攻略 (WEB+DB PRESS plus)