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})};
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(),
#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
router()->_forward_destination($controller_info{router}) if $ENV{OBJECT_REMOTE_LOG_FORWARDING};
}
=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: