use Log::Log4perl; use Test; $testfile = 't/tmp/test12.log'; unlink $testfile if (-e $testfile); # ***************************************************** # nonexistent appender class $conf = <<EOL; log4j.category.simplelayout.test=INFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::FileAppenderx log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayout log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@, '/ERROR: can\'t load appenderclass \'Log::Log4perl::Appender::FileAppenderx\'/'); # ***************************************************** # nonexistent layout class $conf = <<EOL; log4j.category.simplelayout.test=INFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::TestBuffer log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayoutx log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@,'/ERROR: trying to set layout for myAppender to \'Log::Log4perl::Layout::SimpleLayoutx\' failed/'); # ***************************************************** # nonexistent appender class containing a ';' $conf = <<EOL; log4j.category.simplelayout.test=INFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::TestBuffer; log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayout log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@, '/ERROR: can\'t load appenderclass \'Log::Log4perl::Appender::TestBuffer;\'/'); # ***************************************************** # nonexistent layout class containing a ';' $conf = <<EOL; log4j.category.simplelayout.test=INFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::TestBuffer log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayout; log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@, "/trying to set layout for myAppender to 'Log::Log4perl::Layout::SimpleLayout;' failed/"); # ***************************************************** # Relative Layout class $conf = <<EOL; log4j.category.simplelayout.test=INFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::TestBuffer log4j.appender.myAppender.layout = SimpleLayout log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; # It's supposed to find it. ok($@, ''); # ***************************************************** # bad priority $conf = <<EOL; log4j.category.simplelayout.test=xxINFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::File log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayout log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@,"/level 'xxINFO' is not a valid error level/"); # ***************************************************** # nonsense conf file 1 $conf = <<EOL; log4j.category.simplelayout.test=INFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::Screen log4j.appender.myAppender.nolayout = Log::Log4perl::Layout::SimpleLayout log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@,'/Layout not specified for appender myAppender at/'); # ***************************************************** # nonsense conf file 2 $conf = <<EOL; log4j.category.simplelayout.test=INFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::FileAppender log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayout log4j.appender.myAppender = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@,"/log4j.appender.myAppender redefined/"); # ***************************************************** # never define an appender $conf = <<EOL; log4j.category.simplelayout.test=INFO, XXmyAppender log4j.appender.myAppender = Log::Log4perl::Appender::TestBuffer log4j.appender.myAppender.layout = Log::Log4perl::Layout::SimpleLayout log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@,"/ERROR: you didn't tell me how to implement your appender 'XXmyAppender'/"); # ***************************************************** # never define a layout $conf = <<EOL; log4j.category.simplelayout.test=INFO, myAppender log4j.appender.myAppender = Log::Log4perl::Appender::TestBuffer EOL eval{ Log::Log4perl->init(\$conf); }; ok($@,"/Layout not specified for appender myAppender/"); # ************************************ # check continuation chars, this should parse fine $conf = <<EOL; log4j.category.simplelayout.test=\\ INFO, \\ myAppender log4j.appender.myAppender \\ = Log::Log4perl::Appender::TestBuffer #this is stupid, I know log4j.appender.myAppender.layout = Log::Log4perl::Lay\\ out::SimpleL\\ ayout log4j.appender.myAppender.File = $testfile EOL eval{ Log::Log4perl->init(\$conf); }; ok($@,""); # ***************************************************** # init_once # ***************************************************** Log::Log4perl->reset(); $conf = <<EOL; log4perl.category = INFO, myAppender log4perl.appender.myAppender = Log::Log4perl::Appender::TestBuffer log4perl.appender.myAppender.layout = SimpleLayout EOL Log::Log4perl->init_once(\$conf); my $logger = Log::Log4perl::get_logger(""); $logger->error("foobar"); $buffer = Log::Log4perl::Appender::TestBuffer->by_name("myAppender"); #print "BUFFER: [", $buffer->buffer(), "]\n"; ok($buffer->buffer(),"ERROR - foobar\n"); $conf = <<EOL; log4perl.category = FATAL, myAppender log4perl.appender.myAppender = Log::Log4perl::Appender::TestBuffer log4perl.appender.myAppender.layout = SimpleLayout EOL # change config, call init_once(), which should ignore the new # settings. $buffer->buffer(""); Log::Log4perl->init_once(\$conf); $logger = Log::Log4perl::get_logger(""); $logger->error("foobar"); my $buffer = Log::Log4perl::Appender::TestBuffer->by_name("myAppender"); #print "BUFFER: [", $buffer->buffer(), "]\n"; ok($buffer->buffer(),"ERROR - foobar\n"); $conf = <<EOL; log4perl.logger.Foo.Bar = INFO, Screen log4perl.logger.Foo.Bar = INFO, Screen log4perl.appender.Screen = Log::Log4perl::Appender::TestBuffer log4perl.appender.Screen.layout = SimpleLayout EOL eval { Log::Log4perl::init( \$conf ); }; ok($@, '/log4perl.logger.Foo.Bar redefined/'); BEGIN { plan tests => 14, } END{ unlink $testfile if (-e $testfile); }