forward OBJECT_REMOTE_PERL_BIN env var; doc fix for logging; add TODO for left over...
[scpubgit/Object-Remote.git] / lib / Object / Remote / Logging.pm
index 1c45b45..e4e740e 100644 (file)
@@ -9,10 +9,6 @@ use Carp qw(carp croak);
 extends 'Log::Contextual';
 
 exports(qw( ____ router arg_levels ));
-#exception log - log a message then die with that message
-export_tag elog => ('____');
-#fatal log - log a message then call exit(1)
-export_tag flog => ('____');
 
 sub router {
   our $Router_Instance ||= do {
@@ -39,43 +35,14 @@ sub arg_levels {
 sub before_import {
    my ($class, $importer, $spec) = @_;
    my $router = $class->router;
+   our $DID_INIT;
 
-   $class->SUPER::before_import($importer, $spec);
-
-   my @levels = @{$class->arg_levels($spec->config->{levels})};
-   for my $level (@levels) {
-      if ($spec->config->{elog}) {
-         $spec->add_export("&Elog_$level", sub (&) {
-            my ($code, @args) = @_;
-            $router->handle_log_request({
-               controller => $class,
-               package => scalar(caller),
-               caller_level => 1,
-               level => $level,
-            }, $code);
-            #TODO this should get fed into a logger so it can be formatted
-            croak $code->();
-         });
-      }
-      if ($spec->config->{flog}) {
-         #TODO that prototype isn't right
-         $spec->add_export("&Flog_$level", sub (&@) {
-            my ($code, $exit_value) = @_;
-            $exit_value = 1 unless defined $exit_value;
-            #don't let it going wrong stop us from calling exit()
-            eval { $router->handle_log_request({
-               controller => $class,
-               package => scalar(caller),
-               caller_level => 1,
-               level => $level,
-            }, $code) };
-            warn "could not deliver log event during Flog_$level: $@" if $@;
-            eval { carp $code->() };
-            warn "could not emit warning during Flog_$level: $@" if $@;
-            exit($exit_value);
-         });
-      }
+   unless($DID_INIT) {
+     $DID_INIT = 1;
+     init_logging();
    }
+      
+   $class->SUPER::before_import($importer, $spec);
 }
 
 sub _parse_selections {
@@ -105,19 +72,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 +107,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
@@ -159,7 +127,7 @@ Object::Remote::Logging - Logging subsystem for Object::Remote
 
 =head1 SYNOPSIS
 
-  use Object::Remote::Logging qw( :log :dlog :elog :flog arg_levels router );
+  use Object::Remote::Logging qw( :log :dlog arg_levels router );
   
   @levels = qw( trace debug verbose info warn error fatal );
   @levels = arg_levels(); #same result
@@ -168,12 +136,10 @@ Object::Remote::Logging - Logging subsystem for Object::Remote
   $ENV{OBJECT_REMOTE_LOG_FORMAT} = '%l %t: %p::%m %s'; #and more
   $ENV{OBJECT_REMOTE_LOG_SELECTIONS} = 'Object::Remote::Logging Some::Other::Subclass';
   $ENV{OBJECT_REMOTE_LOG_SELECTIONS} = '* -Object::Remote::Logging';
-  $ENV{OBJECT_REMOTE_LOG_FORWARDING} = 0 || 1; #default 0
+  $ENV{OBJECT_REMOTE_LOG_FORWARDING} = 1; #default 0
   
   log_info { 'Trace log event' };
   Dlog_verbose { "Debug event with Data::Dumper::Concise: $_" } { foo => 'bar' };
-  Elog_error { 'Error event that calls die() with this string' };
-  Flog_fatal { 'Fatal event calls warn() then exit()' } 1;
 
 =head1 DESCRIPTION
 
@@ -262,20 +228,7 @@ to the block as the argument list and returned from the log method as a list.
 
 Works just like log_ and Dlog_ except returns only the first argument as a scalar value.
 
-  my $beverage = log_info { "Customer ordered $_[0]" } 'Coffee';
-
-=item Elog_<level>
-
-Log an event and then generate an exception by calling die() with the log message.
-
-  Elog_error { "Could not open file: $!" };
-
-=item Flog_<level>
-
-Log the event, generate a warning with the log message, then call exit(). The exit
-value will default to 1 or can be specified as an argument.
-
-  Flog_fatal { 'Could not lock resource' } 3;
+  my $beverage = logS_info { "Customer ordered $_[0]" } 'Coffee';
 
 =back