Perl Log::FileSimple

Log是常用模块,看了下Perl自带的Log::Message模块,不太明白,从网上找了一个简单的Log模块,看下他的实现方法,可以从中学习一些方法和技巧。

----------------------------------------------------------
package Log::FileSimple;

use 5.006;
use strict;
use warnings;
use Carp;

use FileHandle;
use Data::Dumper;

$Log::FileSimple::VERSION    = '0.02';

# Fields that can be set in new method, with defaults
my %fields =(   
    file     => '/tmp/log.log',
    name    => undef,
    mask    => 0xFFFF,
    autoflush => 0,
);

sub new
{           
    my ($proto,%options) = @_;
    my $class = ref($proto) || $proto;
    my $self = {
        %fields};
    while (my ($key,$value) = each(%options)) {
        if (exists($fields{$key})) {
            $self->{$key} = $value if (defined $value);
        } else {
            die ref($class) . "::new: invalid option '$key'/n";
        }
    }
    foreach (keys(%fields)) {
        die ref($class) . "::new: must specify value for $_"
            if (!defined $self->{$_});
    }
    $self->{mask} = 0xFFFF if ($self->{mask} == -1);
    bless $self, $class;
    $self->_init;
    return $self;
}

sub _init {
    my $self = shift;
    $self->{fh} = new FileHandle ">>$self->{file}";
    $self->{fh}->autoflush($self->{autoflush});
    die "Unable to write to $self->{file}" if (!defined $self->{fh});
}

sub DESTROY {
    my $self = shift;
    $self->{fh}->close;
    undef $self->{fh};
    # Enter here your code
}

sub log {
    my $self         = shift;
    my %log_data     = @_;
   
    $log_data{'id'} = $self->{mask}
        if (!exists $log_data{'id'});
    #$self->{fh}->print("Data :" . $log_data{'id'} . "-" .
    #    $self->{mask} . "-" . ($log_data{'id'} & $self->{mask}) ."/n");
    return if (($log_data{'id'} & $self->{mask}) == 0);
    my $timestamp    = localtime;
    my $sep            = '-' x 80;
    my $log_data = $log_data{'message'} . "/n"
             if (exists $log_data{'message'});
   
    if (exists $log_data{'objects'}) {
        foreach (@{$log_data{'objects'}}) {
            $log_data .= Data::Dumper::Dumper($_) . "/n";
        }
    }

    my $print_data    =<<EOF;
[$timestamp] -> $self->{name}
$log_data
$sep
EOF
    $self->{fh}->print($print_data);
}

sub mask { my $s = shift; if (@_) { $s->{mask} = shift; } return $s->{mask}; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值