From Code to Community: Sponsoring The Perl and Raku Conference 2025 Learn more

use strict;
use Test::More tests => 19;
my %msg;
sub counter {
if (shift->{message} =~ /(INFO|WARN).+(unknown\d|forward\d)/) {
$msg{$2}{$1}++;
}
}
my $log = Log::Handler->new();
$log->config(
config => {
forward => [
{
alias => "forward1",
maxlevel => "info",
minlevel => "emerg",
priority => 2,
forward_to => \&counter,
message_layout => "%L - forward1 %m",
},
{
alias => "forward2",
maxlevel => "info",
minlevel => "emerg",
priority => 1,
forward_to => \&counter,
message_layout => "%L - forward2 %m",
},
{
alias => "forward3",
maxlevel => "info",
minlevel => "emerg",
priority => 3,
forward_to => \&counter,
message_layout => "%L - forward3 %m",
},
{
maxlevel => "info",
minlevel => "emerg",
priority => 3,
forward_to => \&counter,
message_layout => "%L - unknown1 %m",
},
],
},
);
$log->warning(1);
$log->info(1);
$log->reload(
config => {
forward => [
{
alias => "forward1",
maxlevel => "warning",
minlevel => "emerg",
priority => 2,
forward_to => \&counter,
message_layout => "%T [%L] forward1 %m",
},
{
alias => "forward3",
maxlevel => "warning",
minlevel => "emerg",
priority => 1,
forward_to => \&counter,
message_layout => "%T [%L] forward3 %m",
},
{
alias => "forward4",
maxlevel => "warning",
minlevel => "emerg",
priority => 1,
forward_to => \&counter,
message_layout => "%T [%L] forward4 %m",
},
{
alias => "forward5",
maxlevel => "warning",
minlevel => "emerg",
priority => 1,
forward_to => \&counter,
message_layout => "%T [%L] forward5 %m",
},
{
maxlevel => "warning",
minlevel => "emerg",
priority => 3,
forward_to => \&counter,
message_layout => "%L - unknown2 %m",
},
],
}
) or die $log->errstr;
ok(1, "reload");
$log->warning(1);
$log->info(1);
my $f1 = scalar keys %{$msg{forward1}};
my $f2 = scalar keys %{$msg{forward2}};
my $f3 = scalar keys %{$msg{forward3}};
my $f4 = scalar keys %{$msg{forward4}};
my $f5 = scalar keys %{$msg{forward5}};
ok($f1 == 2, "checking forward1 keys ($f1)");
ok($f2 == 2, "checking forward2 keys ($f2)");
ok($f3 == 2, "checking forward3 keys ($f3)");
ok($f4 == 1, "checking forward4 keys ($f4)");
ok($f5 == 1, "checking forward5 keys ($f5)");
ok($msg{forward1}{INFO} == 1, "checking forward1 INFO ($msg{forward1}{INFO})");
ok($msg{forward1}{WARN} == 2, "checking forward1 WARN ($msg{forward1}{WARN})");
ok($msg{forward2}{INFO} == 1, "checking forward2 INFO ($msg{forward2}{INFO})");
ok($msg{forward2}{WARN} == 1, "checking forward2 WARN ($msg{forward2}{WARN})");
ok($msg{forward3}{INFO} == 1, "checking forward3 INFO ($msg{forward3}{INFO})");
ok($msg{forward3}{WARN} == 2, "checking forward3 WARN ($msg{forward3}{WARN})");
ok($msg{forward4}{WARN} == 1, "checking forward3 WARN ($msg{forward4}{WARN})");
ok($msg{forward5}{WARN} == 1, "checking forward3 WARN ($msg{forward5}{WARN})");
ok($msg{forward5}{WARN} == 1, "checking forward3 WARN ($msg{forward5}{WARN})");
ok($msg{unknown1}{INFO} == 1, "checking unknown1 INFO ($msg{unknown1}{INFO})");
ok($msg{unknown1}{WARN} == 1, "checking unknown1 INFO ($msg{unknown1}{WARN})");
ok($msg{unknown2}{WARN} == 1, "checking unknown2 INFO ($msg{unknown1}{WARN})");
ok(!exists $msg{unknown2}{INFO}, "checking unknown2 INFO");