revise log router api to match log::contextual router api change
[scpubgit/Object-Remote.git] / lib / Object / Remote / LogRouter.pm
CommitLineData
f7ea4120 1package Object::Remote::LogRouter;
2
3use Moo;
4use Scalar::Util qw(blessed);
5
6with 'Object::Remote::Role::LogForwarder';
7
8has subscriptions => ( is => 'ro', required => 1, default => sub { [] } );
4a9fa1a5 9has description => ( is => 'rw', required => 1 );
f7ea4120 10
11sub before_import { }
37efeb68 12sub after_import { }
f7ea4120 13
14sub subscribe {
6536ccd3 15 my ($self, $logger, $selector) = @_;
5d59cb98 16 my $subscription_list = $self->subscriptions;
6536ccd3 17
18 my $subscription = [ $logger, $selector ];
f7ea4120 19
6536ccd3 20 push(@$subscription_list, $subscription);
21
22 return $self;
f7ea4120 23}
24
25#TODO turn this logic into a role
6536ccd3 26sub get_loggers {
27 my ($self, $caller, $level) = @_;
5d59cb98 28 my $should_clean = 0;
6536ccd3 29 my @logger_list;
f7ea4120 30
5d59cb98 31 foreach(@{ $self->subscriptions }) {
6536ccd3 32 unless(defined) {
5d59cb98 33 $should_clean = 1;
34 next;
35 }
6536ccd3 36
5d59cb98 37 my ($logger, $selector) = @$_;
6536ccd3 38
39 if ($selector->({ log_level => $level, package => $caller, caller_level => 2 })) {
40 push(@logger_list, $logger);
5d59cb98 41 }
f7ea4120 42 }
43
44 if ($should_clean) {
5d59cb98 45 $self->_remove_dead_subscriptions;
f7ea4120 46 }
47
6536ccd3 48 return @logger_list;
f7ea4120 49}
50
51sub _remove_dead_subscriptions {
5d59cb98 52 my ($self) = @_;
53 my @ok = grep { defined $_ } @{$self->subscriptions};
54 @{$self->subscriptions} = @ok;
55 return;
f7ea4120 56}
57
58
591;
60