X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FObject-Remote.git;a=blobdiff_plain;f=lib%2FObject%2FRemote%2FLogRouter.pm;h=3b1f655f6cc3b20b1dbf1493b5392f44b86101d1;hp=671856a97a76615a4fa98bc1e3df9f2d013cbc7a;hb=6536ccd3af048ed71845cc5ea453855f45e66971;hpb=09130cd025586aa10cb57c33d3ae899a7cc7e185 diff --git a/lib/Object/Remote/LogRouter.pm b/lib/Object/Remote/LogRouter.pm index 671856a..3b1f655 100644 --- a/lib/Object/Remote/LogRouter.pm +++ b/lib/Object/Remote/LogRouter.pm @@ -12,53 +12,32 @@ sub before_import { } sub after_import { } sub subscribe { - my ($self, $logger, $selector, $is_temp) = @_; + my ($self, $logger, $selector) = @_; my $subscription_list = $self->subscriptions; - - if(ref $logger ne 'CODE') { - die 'logger was not a CodeRef or a logger object. Please try again.' - unless blessed($logger); - $logger = do { my $l = $logger; sub { $l } } - } - - my $subscription = [ $logger, $selector ]; + + my $subscription = [ $logger, $selector ]; - $is_temp = 0 unless defined $is_temp; - push(@$subscription_list, $subscription); - if ($is_temp) { - #weaken($subscription->[-1]); - } - return $subscription; + push(@$subscription_list, $subscription); + + return $self; } #TODO turn this logic into a role -sub handle_log_message { - my ($self, $caller, $level, $log_meth, @values) = @_; +sub get_loggers { + my ($self, $caller, $level) = @_; my $should_clean = 0; + my @logger_list; foreach(@{ $self->subscriptions }) { - unless(defined($_)) { + unless(defined) { $should_clean = 1; next; } + my ($logger, $selector) = @$_; - #TODO this is not a firm part of the api but providing - #this info to the selector is a good feature - local($_) = { level => $level, package => $caller }; - if ($selector->(@values)) { - #TODO issues with caller_level have not been resolved yet - #when a logger crosses an object::remote::connection so - $logger = $logger->($caller, { caller_level => -1 }); - - #TODO there is a known issue with the interaction of this - #routed logging scheme and objects proxied with Object::Remote. - #Specifically the loggers must be invoked with a calling - #depth of 0 which isn't possible using a logger that has - #been proxied which is what happens with routed logging - #if the logger is created in one Perl interpreter and the - #logging happens in another - $logger->$level($log_meth->(@values)) - if $logger->${\"is_$level"}; + + if ($selector->({ log_level => $level, package => $caller, caller_level => 2 })) { + push(@logger_list, $logger); } } @@ -66,7 +45,7 @@ sub handle_log_message { $self->_remove_dead_subscriptions; } - return; + return @logger_list; } sub _remove_dead_subscriptions {