X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FObject%2FRemote%2FLogging.pm;h=45a41de51dcc668f05b88dada067c8fc437af18a;hb=998ff9a49b1f18c9ec82212eda094c8261c0ef1c;hp=5901b0c85db7b5e849fed82a3f07a2b81236e1f0;hpb=f048e6dfeaefce08546e91cc9d4bf79492d7ca0d;p=scpubgit%2FObject-Remote.git diff --git a/lib/Object/Remote/Logging.pm b/lib/Object/Remote/Logging.pm index 5901b0c..45a41de 100644 --- a/lib/Object/Remote/Logging.pm +++ b/lib/Object/Remote/Logging.pm @@ -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: