1 package Object::Remote::Logging::Logger;
4 use Scalar::Util qw(weaken);
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' );
13 our $METHODS_INSTALLED;
14 $self->_install_methods unless $METHODS_INSTALLED;
17 sub _build__level_active {
20 my $min_level = $self->min_level;
21 my $max_level = $self->max_level;
24 foreach my $level (@{$self->level_names}) {
25 if($level eq $min_level) {
29 $active{$level} = $should_log;
31 if (defined $max_level && $level eq $max_level) {
39 sub _install_methods {
42 our $METHODS_INSTALLED = 1;
46 foreach my $level (@{$self->level_names}) {
47 *{"is_$level"} = sub { shift(@_)->_level_active->{$level} };
48 *{$level} = sub { shift(@_)->_log($level, @_) };
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);
61 my ($self, $level, $metadata, @content) = @_;
62 my $rendered = "[$level] ";
63 my $remote_info = $metadata->{object_remote};
66 $rendered .= "[connection #$remote_info->{connection_id}] ";
68 $rendered .= "[local] ";
71 $rendered .= join('', @content);
72 $rendered .= "\n" unless substr($rendered, -1) eq "\n";
77 my ($self, $content) = @_;
78 print STDERR $content;