File Coverage

blib/lib/POE/Component/Log4perl.pm
Criterion Covered Total %
statement 10 12 83.3
branch n/a
condition n/a
subroutine 4 4 100.0
pod n/a
total 14 16 87.5


line stmt bran cond sub pod time code
1             package POE::Component::Log4perl;
2              
3 2     2   241434 use 5.008;
  2         9  
  2         86  
4 2     2   14 use strict;
  2         3  
  2         80  
5 2     2   29 use warnings;
  2         4  
  2         81  
6              
7 2     2   1036 use POE;
  0            
  0            
8             use Log::Log4perl;
9             use Log::Log4perl::Level;
10              
11             # ------------------------------------------------------------------------
12              
13             our $VERSION = '0.03';
14             our $level = $INFO;
15              
16             # ------------------------------------------------------------------------
17              
18             sub spawn {
19             my $class = shift;
20              
21             POE::Session->create(
22             inline_states => {
23             _start => \&start_logger,
24             _stop => \&stop_logger,
25             info => sub { local $level = $INFO; poe_logger(@_) },
26             debug => sub { local $level = $DEBUG; poe_logger(@_) },
27             warn => sub { local $level = $WARN; poe_logger(@_) },
28             error => sub { local $level = $ERROR; poe_logger(@_) },
29             fatal => sub { local $level = $FATAL; poe_logger(@_) },
30             trace => sub { local $level = $TRACE; poe_logger(@_) },
31             category => sub {
32             my ($heap, $arg0) = @_[HEAP,ARG0];
33             $heap->{_category} = $arg0;
34             },
35             },
36             args => [@_ ],
37             );
38              
39             }
40              
41             sub start_logger {
42             my ($kernel, $heap, %args) = @_[KERNEL, HEAP, ARG0 .. $#_];
43              
44             Log::Log4perl::init_once($args{ConfigFile});
45             $Log::Log4perl::caller_depth = 1;
46             *{main::get_logfile} = $args{GetLogfile} if (defined($args{GetLogfile}));
47              
48             $heap->{_alias} = $args{Alias} || 'logger';
49             $heap->{_category} = $args{Category};
50              
51             $kernel->alias_set($args{Alias});
52            
53             }
54              
55             sub stop_logger {
56             my ($kernel, $heap) = @_[KERNEL, HEAP];
57              
58             $kernel->alias_remove($heap->{_alias});
59             delete $heap->{_alias};
60              
61             }
62              
63             sub poe_logger {
64             my ($heap, $arg0, @args) = @_[HEAP, ARG0, ARG1 .. $#_];
65              
66             my $message;
67             my $log = Log::Log4perl->get_logger($heap->{_category});
68              
69             if (ref($arg0)) {
70              
71             $log->log(%$arg0);
72              
73             } else {
74              
75             $message = join("", $arg0, @args);
76             $log->log($level, $message);
77              
78             }
79              
80             }
81              
82             1;
83              
84             __END__