Commit | Line | Data |
3a966220 |
1 | package Object::Remote::Logging; |
2 | |
21988035 |
3 | use Moo; |
4 | use Scalar::Util qw(blessed); |
5 | use Object::Remote::Logging::Logger; |
c3d5ef8a |
6 | use Exporter::Declare; |
3a966220 |
7 | |
21988035 |
8 | extends 'Log::Contextual'; |
3a966220 |
9 | |
c3d5ef8a |
10 | exports(qw( router )); |
11 | |
21988035 |
12 | sub router { |
7d063a6a |
13 | our $Router_Instance ||= do { |
14 | require Object::Remote::Logging::Router; |
15 | Object::Remote::Logging::Router->new; |
16 | } |
21988035 |
17 | } |
3a966220 |
18 | |
8bd147f3 |
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) |
21988035 |
27 | sub arg_levels { |
8bd147f3 |
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 )]; |
23591f5f |
32 | } |
3a966220 |
33 | |
21988035 |
34 | #this is invoked on all nodes |
23591f5f |
35 | sub init_logging { |
7d063a6a |
36 | my $level = $ENV{OBJECT_REMOTE_LOG_LEVEL}; |
37 | return unless defined $level; |
38 | my $logger = Object::Remote::Logging::Logger->new( |
39 | min_level => lc($level), |
40 | level_names => Object::Remote::Logging::arg_levels(), |
41 | ); |
42 | |
43 | #TODO check on speed of string compare against a hash with a single key |
44 | router()->connect(sub { |
45 | return unless $_[1]->{controller} eq __PACKAGE__; |
46 | #skip things from remote hosts because they log to STDERR |
47 | #when OBJECT_REMOTE_LOG_LEVEL is in effect |
48 | return if $_[1]->{remote}->{connection_id}; |
49 | $logger |
50 | }); |
23591f5f |
51 | } |
52 | |
21988035 |
53 | #this is invoked by the controlling node |
54 | #on the remote nodes |
23591f5f |
55 | sub init_logging_forwarding { |
21988035 |
56 | my ($self, %controller_info) = @_; |
57 | |
58 | router()->_remote_metadata({ connection_id => $controller_info{connection_id} }); |
59 | router()->_forward_destination($controller_info{router}); |
23591f5f |
60 | } |
3a966220 |
61 | |
62 | 1; |
63 | |