From: Mike S. <m...@pe...> - 2008-08-19 23:36:52
|
On Tue, 19 Aug 2008, Andrew wrote: > As I understand it, calling the following: > > Log::Log4perl->easy_init({ level => $DEBUG }, > { level => $INFO, > file => ">> log.log" }); > > should create two loggers, the first logging DEBUG and up messages to > stderr and the second logging INFO and up to a file called log.log. Unfortunately, having the same logger (the root logger in your case) use two different log levels for two appenders involves a filter/threshold and cannot be done with in easy mode. The configuration file version of your easy mode setup would look something like this: log4perl.logger = INFO, screen, file log4perl.appender.screen = Log::Log4perl::Appender::Screen log4perl.appender.screen.layout = SimpleLayout log4perl.appender.file = Log::Log4perl::Appender::File log4perl.appender.file.filename = foo.log log4perl.appender.file.layout = SimpleLayout and if you want to send messages with a level of DEBUG and up to the screen and messages higher or equal than INFO to a file, you need to open up the logger for DEBUG messages and reduce the exposure of the file appender to INFO via an appender threshold setting: log4perl.logger = DEBUG, screen, file log4perl.appender.screen = Log::Log4perl::Appender::Screen log4perl.appender.screen.layout = SimpleLayout log4perl.appender.file = Log::Log4perl::Appender::File log4perl.appender.file.filename = foo.log log4perl.appender.file.layout = SimpleLayout log4perl.appender.file.Threshold = INFO Unfortunately, there's no way to do that in easy mode yet unless you're using two different loggers (categories): Log::Log4perl->easy_init( { level => $INFO, file => ">>test.log", category => "Bar::Twix", layout => ’%F{1}-%L-%M: %m%n’ { level => $DEBUG, file => "STDOUT", category => "Bar::Mars", layout => ’%m%n’ }, ); -- Mike Mike Schilli m...@pe... > > While this does create two loggers, one logging to stderr and one to a > file, both loggers get whatever level is set last, no matter how I > arrange this list of hashes. > > Any idea what's going on here? I'm using Log4perl 1.17. > > Here's a simple script showing this behavior: > > #! /usr/bin/perl > use strict; > use warnings; > > use Log::Log4perl qw(:easy); > Log::Log4perl->easy_init({ level => $DEBUG }, > { level => $INFO, > file => ">> log.log" }); > > my $log = Log::Log4perl::get_logger(); > $log->debug("debug line"); > $log->info("info line"); > |