Perl Log::FileSimple

本文介绍了一个简单的Perl日志模块Log::FileSimple的设计与实现。该模块支持基本的日志记录功能,包括设置日志文件路径、日志掩码等,并能够记录带有时间戳的日志条目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值