I would expect the code in Tools.pm to log, but it does not. Couldn't quite restrict it to 20 lines, it is as short as I could get it:
the parent process:
#!/usr/local/nik/ess2/perlbrew/perls/perl-5.22.2/bin/perl -w
use strict;
use lib '/testmod';
use Tools;
use Log::Log4perl;
my $conf = q(
log4perl.category.ess2_loader=DEBUG, LOGFILE
log4perl.category.Tools.run_test=INFO, LOGFILE
log4perl.appender.LOGFILE=Log::Log4perl::Appender::File
log4perl.appender.LOGFILE.filename=/testmod/debug.log
log4perl.appender.LOGFILE.mode=append
log4perl.appender.LOGFILE.layout=PatternLayout
log4perl.appender.LOGFILE.layout.ConversionPattern=%d %P [%r] %F %
+L %c - %m%n
);
Log::Log4perl::init( \$conf );
my $log = Log::Log4perl::get_logger("ess2_loader");
$log->info("logging successfully");
run_monitor( { foo => 'bar', baz => 'foobar' } );
sub run_monitor {
my $href = shift;
$log->info("trying to spawn child for periodic check...");
if (my $ps = fork) {
$log->info("successfully spawned PID $ps");
$SIG{CHLD} = "IGNORE";
} else {
$log->info("running check as PID $$");
Tools::run_tests($href);
}
}
The module called from the child:
use warnings;
use strict;
package Tools;
use Log::Log4perl;
my $log = Log::Log4perl::get_logger("Tools::run_test");
my $href = shift;
sub run_tests {
foreach my $test (keys %{$href}) {
$log->info("running test $test with parameters $href->{$test}"
+);
}
exit;
}
1;
Whether I define the category as category.Tools or category.Tools.run_tests makes no difference in this example.
To my understanding category settings propagate to sub-categories, unless these are defined with their own settings. That's why I originally defined the category as 'Tools', to cover all subroutines in Tools.pm