reformat log message generation
[scpubgit/Object-Remote.git] / lib / Object / Remote / Logging / LogAnyInjector.pm
CommitLineData
5cd5276e 1package Object::Remote::Logging::LogAnyInjector;
2
3use Moo;
4use Object::Remote::Logging qw( router );
5use Carp qw(croak);
6
7BEGIN {
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
18sub 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
ae198201 26 #be done but requires modifications to the router
5cd5276e 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_level =~ s/f$//) {
32 my $format = shift(@content);
33 $generator = sub { sprintf($format, @content) };
34 } else {
35 $generator = sub { @content };
36 }
37
38 $log_contextual_level = $LEVEL_NAME_MAP{$log_level};
39 croak "invalid log level name: $log_level" unless defined $log_contextual_level;
40
41 router->handle_log_request({
42 controller => 'Log::Any',
43 package => scalar(caller),
44 caller_level => 1,
45 level => $log_contextual_level,
46 }, $generator);
47
48 return;
49}
50
511;