File Coverage

blib/lib/Log/Any/Adapter/ScreenColoredLevel.pm
Criterion Covered Total %
statement 21 44 47.7
branch 0 20 0.0
condition 0 16 0.0
subroutine 7 11 63.6
pod 0 1 0.0
total 28 92 30.4


line stmt bran cond sub pod time code
1             package Log::Any::Adapter::ScreenColoredLevel;
2              
3             our $DATE = '2015-01-22'; # DATE
4             our $VERSION = '0.06'; # VERSION
5              
6 1     1   22588 use 5.010001;
  1         3  
  1         46  
7 1     1   7 use strict;
  1         2  
  1         43  
8 1     1   6 use warnings;
  1         1  
  1         45  
9              
10 1     1   680 use Log::Any;
  1         2048  
  1         5  
11 1     1   744 use Log::Any::Adapter::Util qw(make_method);
  1         12624  
  1         91  
12 1     1   8 use base qw(Log::Any::Adapter::Base);
  1         2  
  1         921  
13 1     1   2954 use Term::ANSIColor;
  1         8899  
  1         675  
14              
15             my @logging_methods = Log::Any->logging_methods;
16             our %logging_levels;
17             for my $i (0..@logging_methods-1) {
18             $logging_levels{$logging_methods[$i]} = $i;
19             }
20             # some common typos
21             $logging_levels{warn} = $logging_levels{warning};
22              
23             sub _default_level {
24 0 0 0 0     return $ENV{LOG_LEVEL}
25             if $ENV{LOG_LEVEL} && $logging_levels{$ENV{LOG_LEVEL}};
26 0 0         return 'trace' if $ENV{TRACE};
27 0 0         return 'debug' if $ENV{DEBUG};
28 0 0         return 'info' if $ENV{VERBOSE};
29 0 0         return 'error' if $ENV{QUIET};
30 0           'warning';
31             }
32              
33             sub init {
34 0     0 0   my ($self) = @_;
35 0   0       $self->{stderr} //= 1;
36 0   0       $self->{use_color} //= (-t STDOUT);
37 0   0       $self->{colors} //= {
38             trace => 'yellow',
39             debug => '',
40             info => 'green',
41             notice => 'green',
42             warning => 'bold blue',
43             error => 'magenta',
44             critical => 'red',
45             alert => 'red',
46             emergency => 'red',
47             };
48 0   0       $self->{min_level} //= _default_level();
49             }
50              
51             for my $method (Log::Any->logging_methods()) {
52             make_method(
53             $method,
54             sub {
55 0     0     my ($self, $msg, @params) = @_;
56              
57 0 0         return if $logging_levels{$method} <
58             $logging_levels{$self->{min_level}};
59              
60 0 0         my $nl = $msg =~ /\R\z/ ? "" : "\n";
61              
62 0 0         if ($self->{formatter}) {
63 0           $msg = $self->{formatter}->($self, $msg);
64             }
65              
66 0 0 0       if ($self->{use_color} && $self->{colors}{$method}) {
67 0           $msg = Term::ANSIColor::colored($msg, $self->{colors}{$method});
68             }
69              
70 0 0         if ($self->{stderr}) {
71 0           print STDERR $msg, $nl;
72             } else {
73 0           print $msg, $nl;
74             }
75             }
76             );
77             }
78              
79             for my $method (Log::Any->detection_methods()) {
80             my $level = $method; $level =~ s/^is_//;
81             make_method(
82             $method,
83             sub {
84 0     0     my ($self) = @_;
85 0           $logging_levels{$level} >= $logging_levels{$self->{min_level}};
86             }
87             );
88             }
89              
90             1;
91             # ABSTRACT: Send logs to screen with colorized messages according to level
92              
93             __END__