Commit | Line | Data |
5cd5276e |
1 | package Object::Remote::Logging::LogAnyInjector; |
2 | |
8f43bcd9 |
3 | #Experimental object that can be used to receive Log::Any |
4 | #generated log messages and inject them into the log router |
5 | |
5cd5276e |
6 | use Moo; |
7 | use Object::Remote::Logging qw( router ); |
8 | use Carp qw(croak); |
9 | |
10 | BEGIN { |
11 | our %LEVEL_NAME_MAP = ( |
12 | #key is Log::Any log level name or alias and value is Object::Remote::Logging |
13 | #log level name |
14 | trace => 'trace', debug => 'debug', info => 'info', notice => 'verbose', |
15 | warning => 'warn', error => 'error', fatal => 'fatal', |
16 | critical => 'error', alert => 'error', 'emergency' => 'error', |
17 | inform => 'info', warn => 'warn', err => 'error', crit => 'error', |
18 | ); |
19 | } |
20 | |
21 | sub AUTOLOAD { |
22 | my ($self, @content) = @_; |
23 | (my $log_level) = (our $AUTOLOAD =~ /([^:]+)$/); |
24 | my $generator; |
25 | my $log_contextual_level; |
26 | our %LEVEL_NAME_MAP; |
55c0d020 |
27 | |
5cd5276e |
28 | #just a proof of concept - support for the is_ methods can |
ae198201 |
29 | #be done but requires modifications to the router |
5cd5276e |
30 | return 1 if $log_level =~ m/^is_/; |
31 | #skip DESTROY and friends |
32 | return if $log_level =~ m/^[A-Z]+$/; |
55c0d020 |
33 | |
293fb1ee |
34 | if ($log_contextual_level = $LEVEL_NAME_MAP{$log_level}) { |
35 | $generator = sub { @content }; |
36 | } elsif(($log_level =~ s/f$//) && ($log_contextual_level = $LEVEL_NAME_MAP{$log_level})) { |
37 | my $format = shift(@content); |
38 | $generator = sub { sprintf($format, @content) }; |
5cd5276e |
39 | } else { |
293fb1ee |
40 | croak "invalid log level: $log_level"; |
5cd5276e |
41 | } |
55c0d020 |
42 | |
5cd5276e |
43 | router->handle_log_request({ |
55c0d020 |
44 | controller => 'Log::Any', |
5cd5276e |
45 | package => scalar(caller), |
46 | caller_level => 1, |
47 | level => $log_contextual_level, |
48 | }, $generator); |
55c0d020 |
49 | |
5cd5276e |
50 | return; |
51 | } |
52 | |
53 | 1; |