Hi Dave, you're defining different loggers, but what you really want is define different appenders attached to a single logger.
A logger has a category ("" or "main" or "Foo::Bar"), which determines which package namespace to accept messages from, and a set of appenders which it forwards the message to after it determines it should be logged because it exceeds the required level threshold. Your :easy configuration defines two loggers with identical categories, which results in second logger clobbering the first one :). Unfortunately, Log4perl doesn't warn you if you do that in easy mode, had you used a configuration file to set up your configuration, Log4perl would have warned you: log4perl.category redefined at PropertyConfigurator.pm line 98. Now, unfortunately, there's no way to do what you want in easy mode, but you need to use a standard configuration file or string instead. The following snippet defines one logger, which has two appenders attached to it: use Log::Log4perl qw(:easy); Log::Log4perl->init( \<<EOT ); log4perl.logger = TRACE, 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 = test.log log4perl.appender.File.layout = SimpleLayout log4perl.appender.Screen.Threshold = INFO EOT INFO "Goes to screen and file"; TRACE "Only goes to file"; The logger's level is trace, so that it forwards all messages trace and above to both appenders, but the file appender blocks everything below INFO with its threshold setting. Hope that helps! -- -- Mike Mike Schilli m...@perlmeister.com On Wed, 18 Dec 2013, Dave Pointon wrote: > Hi gents , > > I think that I'm experiencing some unexpected behaviour when using > easy_init() with multiple logger definitions (as suggested in the > perldoc), viz ... the reporting level is apparently determined by the > last of the definitions c/w being individually applicable e.g. > > With the call > > Log::Log4perl->easy_init( > { > name => 'LOG', > file => ">$LOGGER_FNAME", > layout => $log_layout, > level => $TRACE, > }, > { > name => 'SCR', > file => 'STDOUT', > layout => $log_layout, > level => $INFO, > }, > ); > > both logs i.e. STDOUT and the file, contain only INFO and above > messages, whereas the call > > Log::Log4perl->easy_init( > { > name => 'SCR', > file => 'STDOUT', > layout => $log_layout, > level => $INFO, > }, > { > name => 'LOG', > file => ">$LOGGER_FNAME", > layout => $log_layout, > level => $TRACE, > }, > ); > > results in all messages being output to both logs. > > In both of the above cases, I expected messages of INFO and above to > STDOUT and all message to the log file, so the question is: Is this a > mis-understanding on my part, or is there an actual defect here ? > > TIA & best rgds , > > ------------------------------------------------------------------------------ Rapidly troubleshoot problems before they affect your business. Most IT organizations don't have a clear picture of how application performance affects their revenue. With AppDynamics, you get 100% visibility into your Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics Pro! http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk _______________________________________________ log4perl-devel mailing list log4perl-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/log4perl-devel