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
[EMAIL PROTECTED]


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

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
log4perl-devel mailing list
log4perl-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/log4perl-devel

Reply via email to