X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FObject%2FRemote%2FLogging.pm;h=15f4d97bba0146142fa496867f5ada2b653e2de9;hb=b3e30047cb366c1a78e2ec716f7e89136430384f;hp=8646c8292bc65a0e0762a05b98bab8399a87b402;hpb=8f43bcd9596b298f867bc3daf5b207d774973af7;p=scpubgit%2FObject-Remote.git diff --git a/lib/Object/Remote/Logging.pm b/lib/Object/Remote/Logging.pm index 8646c82..15f4d97 100644 --- a/lib/Object/Remote/Logging.pm +++ b/lib/Object/Remote/Logging.pm @@ -4,7 +4,6 @@ use Moo; use Scalar::Util qw(blessed); use Object::Remote::Logging::Logger; use Exporter::Declare; -use Carp qw(carp croak); extends 'Log::Contextual'; @@ -70,16 +69,20 @@ sub init_logging { my $level = $ENV{OBJECT_REMOTE_LOG_LEVEL}; my $format = $ENV{OBJECT_REMOTE_LOG_FORMAT}; my $selections = $ENV{OBJECT_REMOTE_LOG_SELECTIONS}; + my $test_logging = $ENV{OBJECT_REMOTE_TEST_LOGGER}; my %controller_should_log; unless (defined $ENV{OBJECT_REMOTE_LOG_FORWARDING} && $ENV{OBJECT_REMOTE_LOG_FORWARDING} ne '') { - $ENV{OBJECT_REMOTE_LOG_FORWARDING} = 1; + $ENV{OBJECT_REMOTE_LOG_FORWARDING} = 0; + } + + if ($test_logging) { + require Object::Remote::Logging::TestLogger; + router->connect(Object::Remote::Logging::TestLogger->new( + min_level => 'trace', max_level => 'error', + level_names => Object::Remote::Logging->arg_levels(), + )); } - - return unless defined $level && $level ne ''; - $format = "[%l %r] %s" unless defined $format; - $selections = __PACKAGE__ unless defined $selections; - %controller_should_log = _parse_selections($selections); { no warnings 'once'; @@ -90,22 +93,29 @@ sub init_logging { } } + return unless defined $level && $level ne ''; + + $format = "[%l %r] %s" unless defined $format; + $selections = __PACKAGE__ unless defined $selections; + %controller_should_log = _parse_selections($selections); + my $logger = Object::Remote::Logging::Logger->new( min_level => lc($level), format => $format, level_names => Object::Remote::Logging::arg_levels(), ); router()->connect(sub { - my $controller = $_[1]->{controller}; + my $controller = $_[1]->{exporter}; my $will_log = $controller_should_log{$controller}; + my $remote_info = $_[1]->{object_remote}; $will_log = $controller_should_log{'*'} unless defined $will_log; return unless $will_log; #skip things from remote hosts because they log to STDERR #when OBJECT_REMOTE_LOG_LEVEL is in effect - return if $_[1]->{remote}->{connection_id}; - $logger + return if $remote_info->{forwarded}; + return $logger; }); } @@ -196,8 +206,8 @@ remote interpreter and the logger for the message is invoked in the local interp Sub-classes of Object::Remote::Logging will have log messages forwarded automatically. Loggers receive forwarded log messages exactly the same way as non-forwarded messages except a forwarded message includes extra metadata about the remote interpreter. Log -forwarding is enabled by default but comes with a performance hit; to disable it set the -OBJECT_REMOTE_LOG_FORWARDING environment variable to 0. See L. +forwarding is disabled by default because it comes with a performance hit; to enable +it set the OBJECT_REMOTE_LOG_FORWARDING environment variable to 1. =head1 EXPORTABLE SUBROUTINES