From 43ea691e0ca40de0082f8eec24aa935cecd49b27 Mon Sep 17 00:00:00 2001 From: Richard Hansen Date: Fri, 2 Aug 2024 15:46:53 -0400 Subject: [PATCH] Logger: Move log output to parentmost Logger This makes it possible for tests to redirect log output so that they can ensure that certain log messages are generated. --- ddclient.in | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/ddclient.in b/ddclient.in index d39d80a..cc637a5 100755 --- a/ddclient.in +++ b/ddclient.in @@ -2356,11 +2356,6 @@ sub ynu { return bless({ctx => $ctx, parent => $parent, _in_logger => 0}, $class); } - sub _ctxs { - my ($self) = @_; - return ($self->{parent} ? $self->{parent}->_ctxs() : (), @{$self->{ctx}}); - } - # Takes the following keyword arguments: # * `msg` (string): The message to log. # * `label` (string): Severity ('DEBUG', 'WARNING', etc.) to prefix each line with. @@ -2381,12 +2376,16 @@ sub ynu { sub _log { my ($self, $args) = @_; + # A new arrayref is created instead of unshifting into @{$args->{ctx}} to avoid mutating + # the caller's arrayref (in case it is reused in a future call). + $args->{ctx} = [@{$self->{ctx}}, @{$args->{ctx}}]; + return $self->{parent}->_log($args) if defined($self->{parent}); my $buffer = $args->{msg} // ''; chomp($buffer); if (!$args->{raw}) { $args->{label} //= ''; my $prefix = $args->{label} ne '' ? sprintf("%-8s ", $args->{label} . ':') : ''; - $prefix .= "[$_]" for $self->_ctxs(), @{$args->{ctx}}; + $prefix .= "[$_]" for @{$args->{ctx}}; $prefix .= '> ' if $prefix; $buffer = "$prefix$buffer"; $prefix =~ s/> $/ /;