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::PatternLayout", "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::PatternLayout", "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{'FILE'}}; 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