cleanup whitespace
[scpubgit/Object-Remote.git] / lib / Object / Remote / Logging / Logger.pm
1 package Object::Remote::Logging::Logger;
2
3 use Moo;
4 use Scalar::Util qw(weaken);
5
6 has level_names => ( is => 'ro', required => 1 );
7 has min_level => ( is => 'ro', required => 1 );
8 has max_level => ( is => 'ro' );
9 has _level_active => ( is => 'lazy' );
10
11 sub BUILD {
12   my ($self) = @_;
13   our $METHODS_INSTALLED; 
14   $self->_install_methods unless $METHODS_INSTALLED;
15 }
16
17 sub _build__level_active {
18   my ($self) = @_; 
19   my $should_log = 0;
20   my $min_level = $self->min_level;
21   my $max_level = $self->max_level;
22   my %active;
23     
24   foreach my $level (@{$self->level_names}) {
25     if($level eq $min_level) {
26       $should_log = 1; 
27     }
28
29     $active{$level} = $should_log;
30         
31     if (defined $max_level && $level eq $max_level) {
32       $should_log = 0;
33     }
34   }
35
36   return \%active;
37 }
38
39 sub _install_methods {
40   my ($self) = @_;
41   my $should_log = 0;
42   our $METHODS_INSTALLED = 1;
43     
44   no strict 'refs';
45     
46   foreach my $level (@{$self->level_names}) {
47     *{"is_$level"} = sub { shift(@_)->_level_active->{$level} };
48     *{$level} = sub { shift(@_)->_log($level, @_) };
49   }
50 }
51
52 sub _log {
53   my ($self, $level, $content, $metadata_in) = @_;
54   #TODO this stinks but is backwards compatible with the original logger api
55   my %metadata = %$metadata_in;
56   my $rendered = $self->_render($level, \%metadata, @$content);
57   $self->_output($rendered);
58 }
59
60 sub _render {
61   my ($self, $level, $metadata, @content) = @_;
62   my $rendered = "[$level] ";
63   my $remote_info = $metadata->{object_remote};
64
65   if ($remote_info) {
66     $rendered .= "[connection #$remote_info->{connection_id}] ";
67   } else {
68     $rendered .= "[local] ";
69   }
70     
71   $rendered .= join('', @content);
72   $rendered .= "\n" unless substr($rendered, -1) eq "\n";
73   return $rendered;
74 }
75
76 sub _output {
77   my ($self, $content) = @_;
78   print STDERR $content;
79 }
80
81
82 1;
83