comment what the log levels are for
[scpubgit/Object-Remote.git] / lib / Object / Remote / Logging.pm
1 package Object::Remote::Logging;
2
3 use Moo;
4 use Scalar::Util qw(blessed);
5 use Object::Remote::Logging::Logger;
6
7 extends 'Log::Contextual';
8
9 sub router {
10   our $Router_Instance ||= do {
11     require Object::Remote::Logging::Router;
12     Object::Remote::Logging::Router->new;
13   }
14 }
15
16 #log level descriptions
17 #info - standard log level - normal program output for the end user
18 #warn - output for program that is executing quietly
19 #error - output for program that is running more quietly
20 #fatal - it is not possible to continue execution; this level is as quiet as is possible
21 #verbose - output for program executing verbosely (-v)
22 #debug - output for program running more verbosely (-v -v)
23 #trace - output for program running extremely verbosely (-v -v -v)
24 sub arg_levels {
25   #the order of the log levels is significant with the
26   #most verbose level being first in the list and the
27   #most quiet as the last item
28   return [qw( trace debug verbose info warn error fatal )];
29 }
30
31 #this is invoked on all nodes
32 sub init_logging {
33   my $level = $ENV{OBJECT_REMOTE_LOG_LEVEL};
34   return unless defined $level;
35   my $logger = Object::Remote::Logging::Logger->new(
36     min_level => lc($level),
37     level_names => Object::Remote::Logging::arg_levels(),
38   );
39
40   #TODO check on speed of string compare against a hash with a single key
41   router()->connect(sub { 
42     return unless $_[1]->{controller} eq __PACKAGE__;
43     #skip things from remote hosts because they log to STDERR
44     #when OBJECT_REMOTE_LOG_LEVEL is in effect
45     return if $_[1]->{remote}->{connection_id};
46     $logger
47   });
48 }
49
50 #this is invoked by the controlling node
51 #on the remote nodes
52 sub init_logging_forwarding {
53   my ($self, %controller_info) = @_;
54   
55   router()->_remote_metadata({ connection_id => $controller_info{connection_id} });
56   router()->_forward_destination($controller_info{router});
57 }
58
59 1;
60