diff options
Diffstat (limited to 't/003Layout.t')
-rwxr-xr-x | t/003Layout.t | 285 |
1 files changed, 285 insertions, 0 deletions
diff --git a/t/003Layout.t b/t/003Layout.t new file mode 100755 index 0000000..0b4db86 --- /dev/null +++ b/t/003Layout.t @@ -0,0 +1,285 @@ +########################################### +# Test Suite for Log::Log4perl +# Mike Schilli, 2002 (m@perlmeister.com) +########################################### + +BEGIN { + if($ENV{INTERNAL_DEBUG}) { + require Log::Log4perl::InternalDebug; + Log::Log4perl::InternalDebug->enable(); + } +} + +use warnings; +use strict; + +######################### +# change 'tests => 1' to 'tests => last_test_to_print'; +######################### +use Test::More; +BEGIN { plan tests => 24 }; + +use Log::Log4perl; +use Log::Log4perl::Layout; + +use Log::Log4perl::Level; +use Log::Log4perl::Appender::TestBuffer; +use File::Spec; + +my $app = Log::Log4perl::Appender->new( + "Log::Log4perl::Appender::TestBuffer"); + +ok(1); # If we made it this far, we/re ok. + +my $logger = Log::Log4perl->get_logger("abc.def.ghi"); +$logger->level($DEBUG); +$logger->add_appender($app); +my $layout = Log::Log4perl::Layout::PatternLayout->new( + "bugo %% %c{2} %-17F{2} %L hugo"); +$app->layout($layout); +my $line = __LINE__ + 1; +$logger->debug("That's the message"); + +is($app->buffer(), "bugo % def.ghi " . + File::Spec->catfile(qw(t 003Layout.t)) . + " $line hugo"); + +############################################################ +# Log the message +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new( + "The message is here: %m"); +$app->layout($layout); +$logger->debug("That's the message"); + +is($app->buffer(), "The message is here: That's the message"); + +############################################################ +# Log the time +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("[%r] %m"); +$app->layout($layout); +$logger->debug("That's the message"); + +like($app->buffer(), qr/^\[\d+\] That's the message$/); + +############################################################ +# Log the date/time +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%d> %m"); +$app->layout($layout); +$logger->debug("That's the message"); + +like($app->buffer(), + qr#^\d{4}/\d\d/\d\d \d\d:\d\d:\d\d> That\'s the message$#); + +############################################################ +# Log the date/time with own timer function +############################################################ +sub mytimer1 { + # 2 days after 1/1/1970 to compensate for time zones + return 180000; +} + +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new( + { time_function => \&mytimer1 }, "%d{MM/yyyy}> %m"); +$app->layout($layout); +$logger->debug("That's the message"); +like($app->buffer(), qr{01/1970}); + + # epoch format +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new( + { time_function => \&mytimer1 }, "%d{e}> %m"); +$app->layout($layout); +$logger->debug("That's the message"); +like($app->buffer(), qr/^180000/); + +############################################################ +# Check SimpleLayout +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::SimpleLayout->new(); +$app->layout($layout); +$logger->debug("That's the message"); + +is($app->buffer(), "DEBUG - That\'s the message\n"); + +############################################################ +# Check depth level of %M - with debug(...) +############################################################ + +sub mysubroutine { + $app->buffer(""); + $layout = Log::Log4perl::Layout::PatternLayout->new("%M: %m"); + $app->layout($layout); + $logger->debug("That's the message"); +} + +mysubroutine(); +is($app->buffer(), 'main::mysubroutine: That\'s the message'); + +############################################################ +# Check depth level of %M - with debug(...) +############################################################ + +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%M: %m"); +$app->layout($layout); +$logger->debug("That's the message"); + +is($app->buffer(), 'main::: That\'s the message'); + +############################################################ +# Check Filename and Line # +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%F-%L %m"); +$app->layout($layout); +$line = __LINE__ + 1; +$logger->debug("That's the message"); + +like($app->buffer(), qr/003Layout.t-$line That's the message/); + +############################################################ +# Don't append a newline if the message already contains one +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%m%n"); +$app->layout($layout); +$logger->debug("That's the message\n"); + +is($app->buffer(), "That\'s the message\n"); + +############################################################ +# But don't suppress other %ns +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("a%nb%n%m%n"); +$app->layout($layout); +$logger->debug("That's the message\n"); + +is($app->buffer(), "a\nb\nThat\'s the message\n"); + +############################################################ +# Test if the process ID works +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%P:%m"); +$app->layout($layout); +$logger->debug("That's the message\n"); + +like($app->buffer(), qr/^\d+:That's the message$/); + +############################################################ +# Test if the hostname placeholder %H works +############################################################ +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%H:%m"); +$app->layout($layout); +$logger->debug("That's the message\n"); + +like($app->buffer(), qr/^[^:]+:That's the message$/); + +############################################################ +# Test max width in the format specifiers +############################################################ +#min width +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%5.5m"); +$app->layout($layout); +$logger->debug("123"); +is($app->buffer(), ' 123'); + +#max width +$app->buffer(""); +$logger->debug("1234567"); +is($app->buffer(), '12345'); + +#left justify +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%-5.5m"); +$app->layout($layout); +$logger->debug("123"); +is($app->buffer(), '123 '); + +############################################################ +# Check depth level of %M - with eval {...} +############################################################ + +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%M: %m"); +$app->layout($layout); +sub foo { + eval { + $logger->debug("Thats the message"); + }; +} +foo(); +is($app->buffer(), 'main::foo: Thats the message'); + +############################################################ +# Check two levels of %M - with eval {...} +############################################################ + +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%M: %m"); +$app->layout($layout); +sub foo2 { + eval { + eval { + $logger->debug("Thats the message"); + }; + }; +} +foo2(); +is($app->buffer(), 'main::foo2: Thats the message'); + +############################################################ +# Check depth level of %M - with eval {...} +############################################################ + +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%M: %m"); +$app->layout($layout); +eval { + $logger->debug("Thats the message"); +}; +is($app->buffer(), 'main::: Thats the message'); + +############################################################ +# Non-portable line breaks +############################################################ + +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%m\\n"); +$app->layout($layout); +eval { + $logger->debug("Thats the message"); +}; +is($app->buffer(), "Thats the message\n"); + +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout->new("%m\\r\\n"); +$app->layout($layout); +eval { + $logger->debug("Thats the message"); +}; +is($app->buffer(), "Thats the message\r\n"); + +############################################################ +# Render a multiline message +############################################################ + +$app->buffer(""); +$layout = Log::Log4perl::Layout::PatternLayout::Multiline->new("%M: %m%n"); +$app->layout($layout); +eval { + $logger->debug("Thats the\nmultiline\nmessage"); +}; +is($app->buffer(), "main::: Thats the\nmain::: multiline\nmain::: message\n"); + |