File Coverage

blib/lib/Log/Any/Adapter/Carp.pm
Criterion Covered Total %
statement 58 58 100.0
branch 18 22 81.8
condition 4 5 80.0
subroutine 13 13 100.0
pod 0 1 0.0
total 93 99 93.9


line stmt bran cond sub pod time code
1             #!perl
2             #
3              
4 3     3   1932 use strict;
  3         4  
  3         103  
5 3     3   10 use warnings;
  3         5  
  3         199  
6              
7             package Log::Any::Adapter::Carp;
8              
9             our ($VERSION) = '1.01';
10             our (@CARP_NOT) = ( __PACKAGE__, 'Log::Any::Proxy' );
11              
12 3     3   11 use Scalar::Util qw(reftype);
  3         4  
  3         232  
13 3     3   12 use Log::Any::Adapter::Util 1;
  3         52  
  3         121  
14              
15 3     3   1207 use parent 'Log::Any::Adapter::Base';
  3         714  
  3         12  
16              
17             sub init {
18 18     18 0 6315 my ($self) = @_;
19 18         17 my $i = 1;
20 18         14 my $callpack;
21             my $logger;
22              
23 18         12 do { $callpack = caller( $i++ ) } while $callpack =~ /^Log::Any::/;
  84         229  
24              
25 18 50       38 $self->{log_level} = 'trace' unless exists $self->{log_level};
26 18 50       75 $self->{log_level} =
27             Log::Any::Adapter::Util::numeric_level( $self->{log_level} )
28             unless $self->{log_level} =~ /^\d+$/;
29              
30 18 100 100     144 if ( $self->{no_trace} ) {
    100          
31             $self->{send_msg} = sub {
32 1   50 1   4 my $text = shift || '';
33 1 50       3 $text .= "\n" unless $text =~ /\n$/;
34 1         5 warn $text;
35 1         4 };
36             }
37             elsif ( $self->{skip_packages}
38             and reftype( $self->{skip_packages} ) eq 'REGEXP' )
39             {
40 8 50       15 my $skipadd = '|^Log::Any::|^Carp::Clan::'
41             . ( $self->{skip_me} ? "|^$callpack\$" : '' );
42 8         35 my $skipre = qr/$self->{skip_packages}$skipadd/;
43              
44 8         25 require Carp::Clan;
45             {
46              
47 8         7 package Log::Any::Adapter::Carp::Clannish;
48 8         17 Carp::Clan->import($skipre);
49             }
50 3     3   700 no warnings 'once';
  3         4  
  3         584  
51 8 100       588 $self->{send_msg} =
52             $self->{full_trace}
53             ? *Log::Any::Adapter::Carp::Clannish::cluck
54             : *Log::Any::Adapter::Carp::Clannish::carp;
55             }
56             else {
57 9         42 require Carp;
58             {
59              
60 9         9 package Log::Any::Adapter::Carp::Carpish;
61 9         181 Carp->import(qw/ carp cluck /);
62             }
63              
64 9         9 my @skip_pkgs;
65 9 100       21 push @skip_pkgs, $callpack
66             if $self->{skip_me};
67 9 100       20 push @skip_pkgs, @{ $self->{skip_packages} || [] };
  9         33  
68              
69 9 100       25 my $carp =
70             $self->{full_trace}
71             ? *Log::Any::Adapter::Carp::Carpish::cluck
72             : *Log::Any::Adapter::Carp::Carpish::carp;
73              
74             $self->{send_msg} = sub {
75              
76             # Ugh, but this is the only Carp mechanism to keep a package out
77             # of the shortmess if the call is *from* it
78 5     5   5 local %Carp::Internal;
79 5         10 $Carp::Internal{$_}++ for @skip_pkgs;
80 5         711 $carp->(@_);
81             }
82 9         38 }
83              
84             }
85              
86             foreach my $method ( Log::Any::Adapter::Util::logging_methods() ) {
87 3     3   12 no strict 'refs';
  3         3  
  3         259  
88             my $method_level = Log::Any::Adapter::Util::numeric_level($method);
89             *{$method} = sub {
90 9     9   334 my $self = shift;
91 9 100       22 return if $method_level > $self->{log_level};
92 8         14 $self->{send_msg}->(@_);
93             };
94             }
95              
96             foreach my $method ( Log::Any::Adapter::Util::detection_methods() ) {
97 3     3   15 no strict 'refs';
  3         5  
  3         267  
98             my $base = substr( $method, 3 );
99             my $method_level = Log::Any::Adapter::Util::numeric_level($base);
100             *{$method} = sub {
101 9     9   1920 return !!( $method_level <= $_[0]->{log_level} );
102             };
103             }
104              
105             1;
106              
107             __END__