1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
package Log::Dispatch::Base;
use strict;
use warnings;
use Carp ();
use Log::Dispatch::Vars
qw( %CanonicalLevelNames %LevelNamesToNumbers @OrderedLevels );
use Scalar::Util qw( refaddr );
our $VERSION = '2.71';
## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
sub _level_as_number {
my $self = shift;
my $level = shift;
my $level_name = $self->level_is_valid($level);
return unless $level_name;
return $LevelNamesToNumbers{$level_name};
}
## use critic
sub level_is_valid {
shift;
my $level = shift;
if ( !defined $level ) {
Carp::croak('Logging level was not provided');
}
if ( $level =~ /\A[0-9]+\z/ && $level <= $#OrderedLevels ) {
return $OrderedLevels[$level];
}
return $CanonicalLevelNames{$level};
}
## no critic (Subroutines::ProhibitUnusedPrivateSubroutines)
sub _apply_callbacks {
my $self = shift;
my %p = @_;
my $msg = delete $p{message};
for my $cb ( @{ $self->{callbacks} } ) {
$msg = $cb->( message => $msg, %p );
}
return $msg;
}
sub add_callback {
my $self = shift;
my $value = shift;
Carp::carp("given value $value is not a valid callback")
unless ref $value eq 'CODE';
$self->{callbacks} ||= [];
push @{ $self->{callbacks} }, $value;
return;
}
sub remove_callback {
my $self = shift;
my $cb = shift;
Carp::carp("given value $cb is not a valid callback")
unless ref $cb eq 'CODE';
my $cb_id = refaddr $cb;
$self->{callbacks}
= [ grep { refaddr $_ ne $cb_id } @{ $self->{callbacks} } ];
return;
}
1;
# ABSTRACT: Code shared by dispatch and output objects.
__END__
=pod
=encoding UTF-8
=head1 NAME
Log::Dispatch::Base - Code shared by dispatch and output objects.
=head1 VERSION
version 2.71
=head1 SYNOPSIS
use Log::Dispatch::Base;
...
@ISA = qw(Log::Dispatch::Base);
=head1 DESCRIPTION
Unless you are me, you probably don't need to know what this class does.
=for Pod::Coverage .*
=head1 SUPPORT
Bugs may be submitted at L<https://github.com/houseabsolute/Log-Dispatch/issues>.
=head1 SOURCE
The source code repository for Log-Dispatch can be found at L<https://github.com/houseabsolute/Log-Dispatch>.
=head1 AUTHOR
Dave Rolsky <autarch@urth.org>
=head1 COPYRIGHT AND LICENSE
This software is Copyright (c) 2023 by Dave Rolsky.
This is free software, licensed under:
The Artistic License 2.0 (GPL Compatible)
The full text of the license can be found in the
F<LICENSE> file included with this distribution.
=cut
|