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");
>
|