#testing init_and_watch #same as 027Watch2, just with signal handling instead of watch/delay code use warnings; use strict; use Test::More; use Config; our $SIGNALS_AVAILABLE = 0; BEGIN { no warnings; # Check if this platform supports signals if (length $Config{sig_name} and length $Config{sig_num}) { eval { $SIG{USR1} = sub { $SIGNALS_AVAILABLE = 1 }; # From the Config.pm manpage my(%sig_num); my @names = split ' ', $Config{sig_name}; @sig_num{@names} = split ' ', $Config{sig_num}; kill $sig_num{USR1}, $$; }; if($@) { $SIGNALS_AVAILABLE = 0; } } if ($SIGNALS_AVAILABLE) { plan tests => 15; }else{ plan skip_all => "only on platforms supporting signals"; } } use Log::Log4perl; use Log::Log4perl::Appender::TestBuffer; use File::Spec; my $WORK_DIR = "tmp"; if(-d "t") { $WORK_DIR = File::Spec->catfile(qw(t tmp)); } unless (-e "$WORK_DIR"){ mkdir("$WORK_DIR", 0755) || die "can't create $WORK_DIR ($!)"; } my $testconf= File::Spec->catfile($WORK_DIR, "test27.conf"); unlink $testconf if (-e $testconf); Log::Log4perl::Appender::TestBuffer->reset(); my $conf1 = <$testconf") || die "can't open $testconf $!"; print CONF $conf1; close CONF; Log::Log4perl->init_and_watch($testconf, 'HUP'); my $logger = Log::Log4perl::get_logger('animal.dog'); ok( $logger->is_debug(), "is_debug - true"); ok( $logger->is_info(), "is_info - true"); ok( $logger->is_warn(), "is_warn - true"); ok( $logger->is_error(), "is_error - true"); ok( $logger->is_fatal(), "is_fatal - true"); my $app0 = Log::Log4perl::Appender::TestBuffer->by_name("myAppender"); $logger->debug('debug message, should appear'); is($app0->buffer(), "DEBUG - debug message, should appear\n", "debug()"); #--------------------------- #now reload and then signal $conf1 = <$testconf") || die "can't open $testconf $!"; print CONF $conf1; close CONF; #--------------------------- # send the signal to the process itself kill(1, $$) or die "Cannot signal"; ok(! $logger->is_debug(), "is_debug - false"); ok(! $logger->is_info(), "is_info - false"); ok( $logger->is_warn(), "is_warn - true"); ok( $logger->is_error(), "is_error - true"); ok( $logger->is_fatal(), "is_fatal - true"); #now the logger is ruled by root's WARN level $logger->debug('debug message, should NOT appear'); my $app1 = Log::Log4perl::Appender::TestBuffer->by_name("myAppender"); is($app1->buffer(), "", "buffer empty"); $logger->warn('warning message, should appear'); is($app1->buffer(), "WARN - warning message, should appear\n", "warn in"); #check the root logger $logger = Log::Log4perl::get_logger(); $logger->warn('warning message, should appear'); like($app1->buffer(), qr/(WARN - warning message, should appear\n){2}/, "2nd warn in"); # ------------------------------------------- #double-check an unrelated category with a lower level $logger = Log::Log4perl::get_logger('animal.cat'); $logger->info('warning message to cat, should appear'); like($app1->buffer(), qr/(WARN - warning message, should appear\n){2}INFO - warning message to cat, should appear/, "message output"); unlink $testconf;