Commit | Line | Data |
5e2b2229 |
1 | package Object::Remote::Logging; |
2 | |
4e446335 |
3 | use Moo; |
4 | use Scalar::Util qw(blessed); |
5 | use Object::Remote::Logging::Logger; |
f4a85080 |
6 | use Exporter::Declare; |
5e2b2229 |
7 | |
4e446335 |
8 | extends 'Log::Contextual'; |
5e2b2229 |
9 | |
b43174a1 |
10 | exports(qw( router arg_levels )); |
f4a85080 |
11 | |
4e446335 |
12 | sub router { |
c0b2df05 |
13 | our $Router_Instance ||= do { |
14 | require Object::Remote::Logging::Router; |
15 | Object::Remote::Logging::Router->new; |
16 | } |
4e446335 |
17 | } |
5e2b2229 |
18 | |
9de32e1d |
19 | #log level descriptions |
20 | #info - standard log level - normal program output for the end user |
21 | #warn - output for program that is executing quietly |
22 | #error - output for program that is running more quietly |
23 | #fatal - it is not possible to continue execution; this level is as quiet as is possible |
24 | #verbose - output for program executing verbosely (-v) |
25 | #debug - output for program running more verbosely (-v -v) |
26 | #trace - output for program running extremely verbosely (-v -v -v) |
4e446335 |
27 | sub arg_levels { |
9de32e1d |
28 | #the order of the log levels is significant with the |
29 | #most verbose level being first in the list and the |
30 | #most quiet as the last item |
31 | return [qw( trace debug verbose info warn error fatal )]; |
4a9fa1a5 |
32 | } |
5e2b2229 |
33 | |
4e446335 |
34 | #this is invoked on all nodes |
4a9fa1a5 |
35 | sub init_logging { |
c0b2df05 |
36 | my $level = $ENV{OBJECT_REMOTE_LOG_LEVEL}; |
0fe333eb |
37 | my $format = $ENV{OBJECT_REMOTE_LOG_FORMAT}; |
c0b2df05 |
38 | return unless defined $level; |
0fe333eb |
39 | $format = "[%l %r] %s" unless defined $format; |
c0b2df05 |
40 | my $logger = Object::Remote::Logging::Logger->new( |
0fe333eb |
41 | min_level => lc($level), format => $format, |
c0b2df05 |
42 | level_names => Object::Remote::Logging::arg_levels(), |
43 | ); |
44 | |
45 | #TODO check on speed of string compare against a hash with a single key |
46 | router()->connect(sub { |
47 | return unless $_[1]->{controller} eq __PACKAGE__; |
48 | #skip things from remote hosts because they log to STDERR |
49 | #when OBJECT_REMOTE_LOG_LEVEL is in effect |
50 | return if $_[1]->{remote}->{connection_id}; |
51 | $logger |
52 | }); |
4a9fa1a5 |
53 | } |
54 | |
4e446335 |
55 | #this is invoked by the controlling node |
56 | #on the remote nodes |
4a9fa1a5 |
57 | sub init_logging_forwarding { |
4e446335 |
58 | my ($self, %controller_info) = @_; |
59 | |
60 | router()->_remote_metadata({ connection_id => $controller_info{connection_id} }); |
61 | router()->_forward_destination($controller_info{router}); |
4a9fa1a5 |
62 | } |
5e2b2229 |
63 | |
64 | 1; |
65 | |