This is PerlMonks "Mobile"

Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl Monk, Perl Meditation
 
PerlMonks  


in reply to log4perl help

What am I missing or doing wrong?

Hi,

The program as posted is incomplete . Adding strict/warning reveals problems.

But, the name of your appenders is not the same as the name of the category

print join " ", keys %{ Log::Log4perl->appenders() }, "\n";

returns app001 app002

easy_init is only so easy ;)

Replies are listed 'Best First'.
Re^2: log4perl help
by drohr (Acolyte) on Mar 03, 2021 at 13:46 UTC
    ok, so how do I name the appenders when using easy_init? I tried:
    Log::Log4perl->easy_init( { name => 'file_appender' level => $DEBUG, file => ">>test.log", category => "FILE" }, { name => 'stdout_appender' level => $DEBUG, file => "STDOUT", category => "STDOUT" } );
    but that did not work. If easy_init does not support naming the appenders, how do I create an initializer with named appenders that I can access and change within code? Thanks
      Use the init method, example in doc

        I appreciate the help and I know about the documentation. I have been reading all that I can and trying to implement what is being discussed. Clearly, I am not understanding something and I would like some specific code direction.

        I took the advice and tried to use the init() method. Here is my attempt:

        use Log::Log4perl; sub init() { my %log_conf = ( "log4perl.logger.STDOUT" => "DEBUG, STDOUT", "log4perl.logger.FILE" => "DEBUG, FILE", "log4perl.appender.STDOUT" => "Log::Log4perl::Appender: +:Screen", "log4perl.appender.STDOUT.stderr" => "0", "log4perl.appender.STDOUT.layout" => "Log::Log4perl::Layout::P +atternLayout", "log4perl.appender.STDOUT.layout.ConversionPattern" => "%d %p> + %F{1}:%L %M - %m%n", "log4perl.appender.FILE" => "Log::Log4perl::Appender: +:File", "log4perl.appender.FILE.filename" => "test.log", "log4perl.appender.FILE.mode" => "append", "log4perl.appender.FILE.layout" => "Log::Log4perl::Layout::P +atternLayout", "log4perl.appender.FILE.layout.ConversionPattern" => "%d %p> % +F{1}:%L %M - %m%n" ); Log::Log4perl->init(\%log_conf); } sub getLogger { my ($category) = @_; my $logger = Log::Log4perl->get_logger($category); return $logger; } sub modify_logger { my ($level) = @_; Log::Log4perl->appender_by_name('FILE')->{min_level} = $level; Log::Log4perl->appender_by_name('FILE')->{filename} = "file2.log"; ${Log::Log4perl::Logger::APPENDER_BY_NAME{'FILE'}}->{min_level} = +$level; ${Log::Log4perl::Logger::APPENDER_BY_NAME{'FILE'}}->{filename} = " +test2.log"; my $logger_appender = ${Log::Log4perl::Logger::APPENDER_BY_NAME{'F +ILE'}}; my $appenders = Log::Log4perl->appenders(); my $appender = Log::Log4perl->appender_by_name('FILE'); print; } init(); modify_logger('TRACE'); my $stdout_logger = getLogger(STDOUT); $stdout_logger->trace("testing stdout logger"); my $file_logger = getLogger(FILE); $file_logger->trace("testing file logger"); print

        I can query and modify the appenders in the modify_logger() function (I can see the changes in my debugger), but the logging behavior does not change. How can I change the values AND the behavior?

        I have been banging my head against this problem and I could really use some specific help.

        Thank you