change logging bootstrap to report uninit remote logging metadata; set flag that...
[scpubgit/Object-Remote.git] / lib / Object / Remote / Logging.pm
index 5901b0c..45a41de 100644 (file)
@@ -39,7 +39,13 @@ sub arg_levels {
 sub before_import {
    my ($class, $importer, $spec) = @_;
    my $router = $class->router;
+   our $DID_INIT;
 
+   unless($DID_INIT) {
+     $DID_INIT = 1;
+     init_logging();
+   }
+      
    $class->SUPER::before_import($importer, $spec);
 
    my @levels = @{$class->arg_levels($spec->config->{levels})};
@@ -105,19 +111,20 @@ sub init_logging {
   my $selections = $ENV{OBJECT_REMOTE_LOG_SELECTIONS};
   my %controller_should_log;
 
-  #TODO how can a third party module perform an action when a new
-  #interpreter is built on a remote node with out requiring support
-  #for that third party module baked into object::remote?
-  eval {
-    require Log::Any::Adapter;
-    Log::Any::Adapter->set('+Object::Remote::Logging::LogAnyInjector');
-  };
-
   return unless defined $level;
   $format = "[%l %r] %s" unless defined $format;
   $selections = __PACKAGE__ unless defined $selections;
   %controller_should_log = _parse_selections($selections);
-  
+
+  {
+    no warnings 'once';
+    if (defined $Object::Remote::FatNode::REMOTE_NODE) {
+      #the connection id for the remote node comes in later
+      #as the controlling node inits remote logging
+      router()->_remote_metadata({ connection_id =>  undef });
+    } 
+  }
+
   my $logger = Object::Remote::Logging::Logger->new(
     min_level => lc($level), format => $format,
     level_names => Object::Remote::Logging::arg_levels(),
@@ -139,10 +146,10 @@ sub init_logging {
 
 #this is invoked by the controlling node
 #on the remote nodes
-sub init_logging_forwarding {
+sub init_remote_logging {
   my ($self, %controller_info) = @_;
   
-  router()->_remote_metadata({ connection_id => $controller_info{connection_id} });
+  router()->_remote_metadata(\%controller_info);
   #TODO having an instance of an object in the remote interpreter causes it to hang
   #on exit intermitently or leave a zombie laying around frequently - not a bug limited
   #to log forwarding
@@ -281,8 +288,8 @@ value will default to 1 or can be specified as an argument.
 
 =head1 LEVEL NAMES
 
-Object::Remote uses an ordered list of log level names with the minimum level
-first and the maximum level last. The list of level names can be accessed via
+Object::Remote uses an ordered list of log level names with the lowest level
+first and the highest level last. The list of level names can be accessed via
 the arg_levels method which is exportable to the consumer of this class. The log
 level names are: