File Coverage

blib/lib/POE/Component/Logger.pm
Criterion Covered Total %
statement 4 6 66.6
branch n/a
condition n/a
subroutine 2 2 100.0
pod n/a
total 6 8 75.0


line stmt bran cond sub pod time code
1             package POE::Component::Logger;
2 1     1   10192 use strict;
  1         3  
  1         38  
3              
4 1     1   3125 use POE;
  0            
  0            
5             use Log::Dispatch::Config;
6              
7             use vars qw($VERSION $DefaultLevel);
8              
9             $VERSION = '1.10';
10              
11             $DefaultLevel = 'warning';
12              
13             sub spawn {
14             my $class = shift;
15             POE::Session->create(
16             inline_states => {
17             _start => \&_start_logger,
18             _stop => \&_stop_logger,
19              
20             # Log at the $DefaultLevel
21             log => sub { my @args = @_; $args[STATE] = $DefaultLevel; _poe_log(@args) },
22             # Log at a specific level
23             debug => \&_poe_log,
24             info => \&_poe_log,
25             notice => \&_poe_log,
26             warning => \&_poe_log,
27             error => \&_poe_log,
28             critical => \&_poe_log,
29             alert => \&_poe_log,
30             emergency => \&_poe_log,
31             },
32             args => [ @_ ],
33             );
34             }
35              
36             sub _start_logger {
37             my ($kernel, $heap, %args) = @_[KERNEL, HEAP, ARG0 .. $#_];
38              
39             $args{Alias} ||= 'logger';
40              
41             Log::Dispatch::Config->configure($args{ConfigFile});
42              
43             $heap->{_logger} = Log::Dispatch::Config->instance;
44             $heap->{_alias} = $args{Alias};
45             $kernel->alias_set($args{Alias});
46             }
47              
48             sub _stop_logger {
49             my ($kernel, $heap) = @_[KERNEL, HEAP];
50              
51             $kernel->alias_remove($heap->{_alias});
52             delete $heap->{_logger};
53             }
54              
55              
56             sub _poe_log {
57             my ($heap, $level, $arg0, @args) = @_[HEAP, STATE, ARG0..$#_];
58              
59             $heap->{_logger}->log(
60             # The default level is the POE event name ($_[STATE])
61             # (may be overriden in given hashref)
62             level => $level,
63             # If we get a HASHREF, expand it
64             # If we get a scalar, concatenate args as the message
65             (ref $arg0) ? (%{$arg0})
66             : (message => join('', $arg0, @args))
67             );
68             }
69              
70              
71             sub log {
72             my ($class, @args) = @_;
73             POE::Kernel->post(logger => $DefaultLevel => @args);
74             }
75              
76             *Logger::log = \&log;
77              
78             1;
79             __END__