X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=scpubgit%2FObject-Remote.git;a=blobdiff_plain;f=lib%2FObject%2FRemote%2FRole%2FLogForwarder.pm;fp=lib%2FObject%2FRemote%2FRole%2FLogForwarder.pm;h=1a8bd93708b762a3d672349b33116a1f6d4f8efb;hp=5be68513692e1b0736e016cec7d3d60470087d88;hb=4e4463355a9ec6afdc7983ee36daa9f11306d4fc;hpb=6536ccd3af048ed71845cc5ea453855f45e66971 diff --git a/lib/Object/Remote/Role/LogForwarder.pm b/lib/Object/Remote/Role/LogForwarder.pm index 5be6851..1a8bd93 100644 --- a/lib/Object/Remote/Role/LogForwarder.pm +++ b/lib/Object/Remote/Role/LogForwarder.pm @@ -1,64 +1,41 @@ -#This is an experimental method for working with -#Log::Contextual crossing Object::Remote connections -#transparently - package Object::Remote::Role::LogForwarder; -use Moo::Role; -use Scalar::Util qw(weaken); +use Moo::Role; use Carp qw(cluck); -with 'Log::Contextual::Role::Router'; - -#TODO re-weaken router references when object::remote -#weak reference operation is figured out - -has child_routers => ( is => 'ro', required => 1, default => sub { [] } ); -has parent_router => ( is => 'rw', );#weak_ref => 1 ); - -sub BUILD { } - -after BUILD => sub { - my ($self) = @_; -# my $parent = $self->parent_router; -# return unless defined $parent ; -# $parent->add_child_router($self); -}; +has _forward_destination => ( is => 'rw' ); +has enable_forward => ( is => 'rw', default => sub { 1 } ); +has _forward_stop => ( is => 'ro', required => 1, default => sub { {} } ); + +around _get_loggers => sub { + my ($orig, $self, %metadata) = @_; + my $package = $metadata{package}; + my %clone = %metadata; + our $reentrant; + + return if $reentrant; + local($reentrant) = 1; + + my @loggers = $orig->($self, %clone); -sub describe { - my ($self, $depth) = @_; - $depth = -1 unless defined $depth; - $depth++; - my $buf = "\t" x $depth . $self->description . "\n"; - foreach my $child (@{$self->child_routers}) { - next unless defined $child; - $buf .= $child->describe($depth); + if (! $self->enable_forward || $self->_forward_stop->{$package}) { + #warn "will not forward log events for '$package'"; + return @loggers; } - - return $buf; -} + + my $forward_to = $self->_forward_destination; + + if ($forward_to) { + push(@loggers, $forward_to->_get_loggers(%clone)); + } + + return @loggers; +}; -sub add_child_router { - my ($self, $router) = @_; - push(@{ $self->child_routers }, $router); - #TODO re-weaken when object::remote proxied - #weak references is figured out -# weaken(${ $self->child_routers }[-1]); - return; +sub exclude_forwarding { + my ($self, $package) = @_; + $package = caller unless defined $package; + $self->_forward_stop->{$package} = 1; } -#sub remove_child_router { -# my ($self, $description) = @_; -# return delete $self->child_routers->{$description}; -#} - -after get_loggers => sub { - my ($self, @args) = @_; - my $parent = $self->parent_router; - - return unless defined $parent; - $parent->handle_log_message(@args); -}; - 1; -