File Coverage

blib/lib/Log/ger/Format/MultilevelLog.pm
Criterion Covered Total %
statement 30 38 78.9
branch 4 10 40.0
condition 2 4 50.0
subroutine 9 9 100.0
pod 0 2 0.0
total 45 63 71.4


line stmt bran cond sub pod time code
1             package Log::ger::Format::MultilevelLog;
2              
3 2     2   365680 use strict;
  2         3  
  2         60  
4 2     2   7 use warnings;
  2         2  
  2         87  
5              
6 2     2   356 use Log::ger::Util;
  2         3  
  2         521  
7              
8             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
9             our $DATE = '2023-12-29'; # DATE
10             our $DIST = 'Log-ger'; # DIST
11             our $VERSION = '0.042'; # VERSION
12              
13             sub meta { +{
14 1     1 0 4 v => 2,
15             } }
16              
17             sub get_hooks {
18 1     1 0 3 my %conf = @_;
19              
20 1   50     5 my $sub_name = $conf{sub_name} || 'log';
21 1   50     3 my $method_name = $conf{method_name} || 'log';
22              
23             return {
24             create_filter => [
25             __PACKAGE__, # key
26             50, # priority
27             sub { # hook
28 2     2   4 my %hook_args = @_; # see Log::ger::Manual::Internals/"Arguments passed to hook"
29              
30             my $filter = sub {
31 2         11 my $level = Log::ger::Util::numeric_level(shift);
32 2 100       7 return 0 unless $level <= $Log::ger::Current_Level;
33 1         7 {level=>$level};
34 2         4 };
35              
36 2         7 [$filter, 0, 'ml'];
37             },
38             ],
39              
40             create_formatter => [
41             __PACKAGE__, # key
42             50, # priority
43             sub { # hook
44 2     2   4 my %hook_args = @_; # see Log::ger::Manual::Internals/"Arguments passed to hook"
45              
46             my $formatter =
47              
48             # just like the default formatter, except it accepts first
49             # argument (level)
50             sub {
51 1         2 shift; # level
52 1 50       9 return $_[0] if @_ < 2;
53 0         0 my $fmt = shift;
54 0         0 my @args;
55 0         0 for (@_) {
56 0 0       0 if (!defined($_)) {
    0          
57 0         0 push @args, '';
58             } elsif (ref $_) {
59 0         0 push @args, Log::ger::Util::_dump($_);
60             } else {
61 0         0 push @args, $_;
62             }
63             }
64             # redefine is just a dummy category for perls < 5.22
65             # which don't have 'redundant' yet
66 2 50   2   11 no warnings ($warnings::Bits{'redundant'} ? 'redundant' : 'redefine');
  2         2  
  2         282  
67 0         0 sprintf $fmt, @args;
68 2         43 };
69              
70 2         6 [$formatter, 0, 'ml'];
71             },
72             ],
73              
74             create_routine_names => [
75             __PACKAGE__, # key
76             50, # priority
77             sub { # hook
78 2     2   3 my %hook_args = @_; # see Log::ger::Manual::Internals/"Arguments passed to hook"
79             return [{
80             logger_subs => [[$sub_name , undef, 'ml', undef, 'ml']],
81             logger_methods => [[$method_name, undef, 'ml', undef, 'ml']],
82 2         30 }, $conf{exclusive}];
83             },
84 1         10 ],
85             };
86             }
87              
88             1;
89             # ABSTRACT: Create a log($LEVEL, ...) subroutine/method
90              
91             __END__