1use strict; 2use warnings FATAL => 'all'; 3 4use Test::More 0.88; 5 6use File::Spec; 7use File::Temp qw( tempdir ); 8use Log::Dispatch; 9 10my $dir = tempdir( CLEANUP => 1 ); 11 12{ 13 my $logger = Log::Dispatch->new( 14 outputs => [ 15 [ 16 'File', 17 min_level => 'debug', 18 newline => 1, 19 name => 'lazy_open', 20 filename => File::Spec->catfile( $dir, 'lazy_open.log' ), 21 lazy_open => 1, 22 ], 23 ], 24 ); 25 26 ok( 27 !$logger->output('lazy_open')->{fh}, 28 'lazy_open output has not created a fh before first write' 29 ); 30 31 $logger->log( level => 'info', message => 'first message' ); 32 is( 33 _slurp( $logger->output('lazy_open')->{filename} ), 34 "first message\n", 35 'first line from lazy_open output' 36 ); 37 38 ok( 39 $logger->output('lazy_open')->{fh}, 40 'lazy_open output has still an open fh' 41 ); 42 43 $logger->log( level => 'info', message => 'second message' ); 44 45 is( 46 _slurp( $logger->output('lazy_open')->{filename} ), 47 "first message\nsecond message\n", 48 'full content from caw output' 49 ); 50 51 ok( 52 $logger->output('lazy_open')->{fh}, 53 'lazy_open output has still an open fh' 54 ); 55} 56 57done_testing(); 58 59sub _slurp { 60 open my $fh, '<', $_[0] 61 or die "Cannot read $_[0]: $!"; 62 my $s = do { 63 local $/ = undef; 64 <$fh>; 65 }; 66 close $fh or die $!; 67 return $s; 68} 69