Mail-Decency

 view release on metacpan or  search on metacpan

lib/Mail/Decency/Helper/Logger.pm  view on Meta::CPAN

package Mail::Decency::Helper::Logger;

use Moose;

use version 0.74; our $VERSION = qv( "v0.1.4" );

use Sys::Syslog qw/ :standard :macros /;
use Scalar::Util qw/ weaken /;
use File::Path qw/ make_path /;
use Carp qw/ carp /;

=head1 NAME

Mail::Decency::Helper::Logger

=head1 DESCRIPTION

Helper modules for Decency policies or content filters

=cut

has prefix     => ( is => 'rw', isa => 'Str', default => '' ); 
has syslog     => ( is => 'rw', isa => 'Bool' );
has console    => ( is => 'rw', isa => 'Bool' );
has directory  => ( is => 'rw', isa => 'Str' );
has log_level  => ( is => 'rw', default => 0 );
has disabled   => ( is => 'rw', isa => 'Bool', default => 0 );
has _log_level => ( is => 'ro', isa => 'HashRef', default => sub { {
    error   => 0,
    info    => 1,
    verbose => 2,
    debug0  => 3,
    debug1  => 4,
    debug2  => 5,
    debug3  => 6,
} } );
has _log_file_handles => ( is => 'rw', isa => 'HashRef', default => sub { {} } );
has _log_file_inodes => ( is => 'rw', isa => 'HashRef', default => sub { {} } );
has _log_method => ( is => 'rw', isa => 'CodeRef' );



sub BUILD {
    my ( $self, $args_ref ) = @_;
    
    my @print = ();
    
    # determine log level
    my $log_level = defined $args_ref->{ log_level }
        ? $args_ref->{ log_level }
        : "info"
    ;
    $log_level = $log_level !~ /^\d+$/
        ? ( defined $self->_log_level->{ $log_level }
            ? $self->_log_level->{ $log_level }
            : 1
        )
        : $log_level
    ;
    $self->log_level( $log_level );
    push @print, "LogLevel: $log_level";
    
    # determine output
    foreach my $output( qw/ syslog console directory / ) {
        $self->$output( $args_ref->{ $output } )
            if $args_ref->{ $output };
    }
    
    
    my @methods = ();
    
    # enable syslog
    if ( $self->syslog ) {
        openlog( "decency", "ndelay,pid", "local0" );
        push @methods, sub {
            my ( $self, $int_log_level, $str_log_level, $msg ) = @_;
            my $level = $int_log_level == 0
                ? LOG_ERR
                : ( $int_log_level == 1
                    ? LOG_INFO
                    : LOG_DEBUG
                )
            ;
            my $suffix = $level == LOG_DEBUG
                ? "/$str_log_level"
                : ""
            ;
            Sys::Syslog::syslog( $level => "[". $self->prefix. $suffix. "]: $msg" );



( run in 0.717 second using v1.01-cache-2.11-cpan-39bf76dae61 )