1 package Object::Remote::Logging::Logger;
4 use Scalar::Util qw(weaken);
6 has format => ( is => 'ro', required => 1, default => sub { '%l: %s' } );
7 has level_names => ( is => 'ro', required => 1 );
8 has min_level => ( is => 'ro', required => 1 );
9 has max_level => ( is => 'ro', required => 1, deafult => sub { 'info' } );
10 has _level_active => ( is => 'lazy' );
14 our $METHODS_INSTALLED;
15 $self->_install_methods unless $METHODS_INSTALLED;
18 sub _build__level_active {
21 my $min_level = $self->min_level;
22 my $max_level = $self->max_level;
25 foreach my $level (@{$self->level_names}) {
26 if($level eq $min_level) {
30 $active{$level} = $should_log;
32 if (defined $max_level && $level eq $max_level) {
40 sub _install_methods {
43 our $METHODS_INSTALLED = 1;
47 foreach my $level (@{$self->level_names}) {
48 *{"is_$level"} = sub { shift(@_)->_level_active->{$level} };
49 *{$level} = sub { shift(@_)->_log($level, @_) };
54 my ($self, $level, $content, $metadata_in) = @_;
55 my %metadata = %$metadata_in;
56 my $rendered = $self->_render($level, \%metadata, @$content);
57 $self->_output($rendered);
60 sub _create_format_lookup {
61 my ($self, $level, $metadata, $content) = @_;
62 my $method = $metadata->{method};
64 $method = '(none)' unless defined $method;
67 '%' => '%', t => $self->_render_time($metadata->{timestamp}),
68 r => $self->_render_remote($metadata->{object_remote}),
69 s => $self->_render_log(@$content), l => $level,
70 c => $metadata->{controller}, p => $metadata->{package}, m => $method,
71 f => $metadata->{filename}, i => $metadata->{line},
72 h => $metadata->{hostname}, P => $metadata->{pid},
77 sub _get_format_var_value {
78 my ($self, $name, $data) = @_;
79 my $val = $data->{$name};
80 return $val if defined $val;
85 my ($self, $time) = @_;
86 return scalar(localtime($time));
90 my ($self, $remote) = @_;
91 return 'local' if ! defined $remote || ! defined $remote->{connection_id};
92 return 'remote #' . $remote->{connection_id};
96 my ($self, @content) = @_;
97 return join('', @content);
100 my ($self, $level, $metadata, @content) = @_;
101 my $var_table = $self->_create_format_lookup($level, $metadata, [@content]);
102 my $template = $self->format;
104 $template =~ s/%([\w%])/$self->_get_format_var_value($1, $var_table)/ge;
107 $template =~ s/\n/\n /g;
113 my ($self, $content) = @_;
114 print STDERR $content;