File Coverage

blib/lib/Log/ger/Plugin/WithCarp.pm
Criterion Covered Total %
statement 59 59 100.0
branch 18 20 90.0
condition 24 24 100.0
subroutine 20 20 100.0
pod 0 2 0.0
total 121 125 96.8


line stmt bran cond sub pod time code
1             package Log::ger::Plugin::WithCarp;
2              
3             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
4             our $DATE = '2020-03-11'; # DATE
5             our $DIST = 'Log-ger-Plugin-WithWarn'; # DIST
6             our $VERSION = '0.004'; # VERSION
7              
8 1     1   85437 use strict;
  1         10  
  1         33  
9 1     1   6 use warnings;
  1         1  
  1         24  
10              
11 1     1   15 use Carp ();
  1         3  
  1         17  
12 1     1   4 use Log::ger ();
  1         2  
  1         1364  
13              
14             sub meta { +{
15 1     1 0 19 v => 2,
16             } }
17              
18             sub get_hooks {
19 1     1 0 15 my %plugin_conf = @_;
20              
21             return {
22             create_routine_names => [
23             __PACKAGE__, # key
24             50, # priority
25             sub { # hook
26 2     2   578 my %hook_args = @_;
27              
28 2         5 my $levels = \%Log::ger::Levels;
29              
30             return [{
31             logger_subs => [
32 2         15 (map { (["log_${_}_carp", $_, "default"], ["log_${_}_cluck", $_, "default"]) }
33 12         27 grep {$levels->{$_} == 30} keys %$levels),
34 4         22 (map { (["log_${_}_croak", $_, "default"], ["log_${_}_confess", $_, "default"]) }
35 12 50       45 grep {$levels->{$_} > 0 && $levels->{$_} <= 20} keys %$levels),
36             ],
37             level_checker_subs => [],
38             logger_methods => [
39 2         10 (map { (["${_}_carp", $_, "default"], ["${_}_cluck", $_, "default"]) }
40 12         23 grep {$levels->{$_} == 30} keys %$levels),
41 4         23 (map { (["${_}_croak", $_, "default"], ["${_}_confess", $_, "default"]) }
42 2 50       9 grep {$levels->{$_} > 0 && $levels->{$_} <= 20} keys %$levels),
  12         40  
43             ],
44             level_checker_methods => [
45             ],
46             }, 0];
47             }],
48             before_install_routines => [
49             __PACKAGE__, # key
50             50, # priority
51             sub { # hook
52 2     2   2754 my %hook_args = @_;
53              
54             # wrap the logger
55 2         4 for my $r (@{ $hook_args{routines} }) {
  2         6  
56 36         76 my ($code, $name, $numlevel, $type) = @$r;
57 36 100 100 1   421 if ($type =~ /^log(ger)?_sub/ && $name =~ /\Alog_\w+_carp\z/ ) { $r->[0] = sub { $code->(@_); Carp::carp ($hook_args{formatters}{default}(@_)."\n") } }
  1 100 100     6  
  1 100 100     355  
  1 100 100     6  
    100 100        
    100 100        
    100 100        
    100 100        
58 1     1   7 elsif ($type =~ /^log(ger)?_method/ && $name =~ /\A\w+_carp\z/ ) { $r->[0] = sub { $code->(@_); shift; Carp::carp ($hook_args{formatters}{default}(@_)."\n") } }
  1         1127  
  1         3  
  1         4  
59 1     1   4 elsif ($type =~ /^log(ger)?_sub/ && $name =~ /\Alog_\w+_cluck\z/ ) { $r->[0] = sub { $code->(@_); Carp::cluck ($hook_args{formatters}{default}(@_)."\n") } }
  1         852  
  1         7  
60 1     1   6 elsif ($type =~ /^log(ger)?_method/ && $name =~ /\A\w+_cluck\z/ ) { $r->[0] = sub { $code->(@_); shift; Carp::cluck ($hook_args{formatters}{default}(@_)."\n") } }
  1         1174  
  1         3  
  1         4  
61 2     2   8 elsif ($type =~ /^log(ger)?_sub/ && $name =~ /\Alog_\w+_croak\z/ ) { $r->[0] = sub { $code->(@_); Carp::croak ($hook_args{formatters}{default}(@_)."\n") } }
  2     2   1992  
  2         10  
62 2     2   9 elsif ($type =~ /^log(ger)?_method/ && $name =~ /\A\w+_croak\z/ ) { $r->[0] = sub { $code->(@_); shift; Carp::croak ($hook_args{formatters}{default}(@_)."\n") } }
  2     2   1380  
  2         6  
  2         8  
63 2     2   8 elsif ($type =~ /^log(ger)?_sub/ && $name =~ /\Alog_\w+_confess\z/) { $r->[0] = sub { $code->(@_); Carp::confess($hook_args{formatters}{default}(@_)."\n") } }
  2     2   1309  
  2         9  
64 2     2   8 elsif ($type =~ /^log(ger)?_method/ && $name =~ /\A\w+_confess\z/ ) { $r->[0] = sub { $code->(@_); shift; Carp::confess($hook_args{formatters}{default}(@_)."\n") } }
  2     2   1808  
  2         7  
  2         7  
65             }
66             },
67 1         10 ],
68             };
69             }
70              
71             1;
72             # ABSTRACT: Add *_{carp,cluck,croak,confess} logging routines
73              
74             __END__