I have been looking a long time for something to set the logging level in log4perl. I finally found a setting for it. It is the "Threshold" setting.
So you can set the screen to INFO but the log to TRACE. That way you don't get all the just printed to the screen but you can reference back to it.
This is really good for debugging purposes
For example :
my $log_conf = qq(
log4perl.category = TRACE, SCREEN, LOG
log4perl.appender.LOG = Log::Log4perl::Appender::File
log4perl.appender.LOG.filename = $ref->{config}->{Log}
log4perl.appender.LOG.mode = append
log4perl.appender.LOG.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.LOG.layout.ConversionPattern = %d %p %L %M %m %n
log4perl.appender.LOG.Threshold = TRACE
log4perl.appender.SCREEN = Log::Log4perl::Appender::Screen
log4perl.appender.SCREEN.stderr = 0
log4perl.appender.SCREEN.layout = Log::Log4perl::Layout::PatternLayout
log4perl.appender.SCREEN.layout.ConversionPattern = %d %p %L %M %m %n
log4perl.appender.SCREEN.Threshold = INFO
) ;
Log::Log4perl::init ( \$log_conf ) ;
my $log = Log::Log4perl->get_logger () ;