微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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}; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐