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