Log-Log4perl

 view release on metacpan or  search on metacpan

t/017Watch.t  view on Meta::CPAN

   trunc($testconf);
};


# ***************************************************************
# Check the 'recreate' feature with signal handling

SKIP: {
  skip "File recreation not supported on Win32", 9 if is_like_windows();

  # Use two appenders to confirm that both files are recreated when the
  # signal is received, rather than just whichever watcher was created
  # last.

  my $conf5 = <<EOL;
    log4j.category.animal.dog   = INFO, myAppender1
    log4j.category.animal.cat   = INFO, myAppender2

    log4j.appender.myAppender1          = Log::Log4perl::Appender::File
    log4j.appender.myAppender1.layout   = Log::Log4perl::Layout::SimpleLayout
    log4j.appender.myAppender1.filename = $testfile
    log4j.appender.myAppender1.recreate = 1
    log4j.appender.myAppender1.recreate_check_signal = USR1

    log4j.appender.myAppender2          = Log::Log4perl::Appender::File
    log4j.appender.myAppender2.layout   = Log::Log4perl::Layout::SimpleLayout
    log4j.appender.myAppender2.filename = $testfile2
    log4j.appender.myAppender2.recreate = 1
    log4j.appender.myAppender2.recreate_check_signal = USR1
EOL

  Log::Log4perl->init(\$conf5);
  
  my $logger = Log::Log4perl::get_logger('animal.dog');
  $logger->info("test1");
  ok(-f $testfile, "recreate_signal - testfile created");

  my $logger2 = Log::Log4perl::get_logger('animal.cat');
  $logger2->info("test1");
  ok(-f $testfile2, "recreate_signal - testfile created");

  
  unlink $testfile, $testfile2;
  ok(!-f $testfile, "recreate_signal - testfile deleted");
  ok(!-f $testfile2, "recreate_signal - testfile2 deleted");
  
  $logger->info("test1");
  $logger2->info("test1");
  ok(!-f $testfile, "recreate_signal - testfile still missing");
  ok(!-f $testfile2, "recreate_signal - testfile2 still missing");
  
  ok(kill('USR1', $$), "sending signal");
  $logger->info("test1");
  $logger2->info("test1");
  ok(-f $testfile, "recreate_signal - testfile reinstated");
  ok(-f $testfile2, "recreate_signal - testfile2 reinstated");
};


SKIP: {
  skip "Removing busy files not supported on Win32", 1 if is_like_windows();

    # ***************************************************************
    # Check the 'recreate' feature with check_interval
    
    trunc($testfile);
    my $conf3 = <<EOL;
    log4j.category.animal.dog   = INFO, myAppender
    
    log4j.appender.myAppender          = Log::Log4perl::Appender::File
    log4j.appender.myAppender.layout   = Log::Log4perl::Layout::SimpleLayout
    log4j.appender.myAppender.filename = $testfile
    log4j.appender.myAppender.recreate = 1
    log4j.appender.myAppender.recreate_check_interval = 1
    log4j.appender.myAppender.mode     = append
EOL
    
      # Create logfile
    Log::Log4perl->init(\$conf3);
      # ... and immediately remove it
    unlink $testfile or die "cannot remove file $testfile ($!)";
    
    print "sleeping for 2 secs\n";
    sleep(2);
    
    $logger = Log::Log4perl::get_logger('animal.dog');
    $logger->info("test1");
    open (LOG, $testfile) or die "can't open $testfile $!";
    is(scalar <LOG>, "INFO - test1\n", "recreate before first write");
    close LOG;
}

# ***************************************************************
# Check the 'recreate' feature with check_interval (2nd write)

SKIP: {
  skip "Signal handling not supported on Win32", 1 if is_like_windows();
    trunc($testfile);
    my $conf3 = <<EOL;
    log4j.category.animal.dog   = INFO, myAppender

    log4j.appender.myAppender          = Log::Log4perl::Appender::File
    log4j.appender.myAppender.layout   = Log::Log4perl::Layout::SimpleLayout
    log4j.appender.myAppender.filename = $testfile
    log4j.appender.myAppender.recreate = 1
    log4j.appender.myAppender.recreate_check_interval = 1
    log4j.appender.myAppender.mode     = append
EOL

      # Create logfile
    Log::Log4perl->init(\$conf3);

      # Write to it
    $logger = Log::Log4perl::get_logger('animal.dog');
    $logger->info("test1");

      # ... remove it (stupid windoze cannot remove an open file)
    rename $testfile, "$testfile.old";
    unlink $testfile;

    print "sleeping for 2 secs\n";
    sleep(2);

      # ... write again
    $logger->info("test2");

    open (LOG, $testfile) or die "can't open $testfile $!";
    is(scalar <LOG>, "INFO - test2\n", "recreate before 2nd write");
    close LOG;
    unlink "$testfile.old";
};

# ***************************************************************
# Check the 'recreate' feature with moved/recreated file

SKIP: {
  skip "Moving busy files not supported on Win32", 1 if is_like_windows();

    trunc($testfile);
    my $conf3 = <<EOL;
    log4j.category.animal.dog   = INFO, myAppender

    log4j.appender.myAppender          = Log::Log4perl::Appender::File
    log4j.appender.myAppender.layout   = Log::Log4perl::Layout::SimpleLayout
    log4j.appender.myAppender.filename = $testfile
    log4j.appender.myAppender.recreate = 1
    log4j.appender.myAppender.recreate_check_interval = 1
    log4j.appender.myAppender.mode     = append
EOL

      # Create logfile
    Log::Log4perl->init(\$conf3);

      # Get a logger, but dont write to it
    $logger = Log::Log4perl::get_logger('animal.dog');

    rename "$testfile", "$testfile.old" or die "Cannot rename ($!)";
      # recreate it
    trunc($testfile);

    print "sleeping for 2 secs\n";
    sleep(2);

      # ... write to (hopefully) truncated file
    $logger->info("test3");

    open (LOG, $testfile) or die "can't open $testfile $!";
    is(scalar <LOG>, "INFO - test3\n", "log to externally recreated file");
    close LOG;

    unlink "$testfile.old";
};

done_testing;



( run in 3.304 seconds using v1.01-cache-2.11-cpan-d8267643d1d )