And that is why recently I started to not even have a root logger - to avoid the double logging that you mention.
I did this as an experiment with some code I am writing now - and it seems to work fabulously well
# set your logger here
# Note - no root logger - this is not always what you want
# but at this early stage of developement, is good enough
#log4perl.logger=INFO, A1
log4perl.logger.WSR_Generator._create_wsr_document=INFO, A1
#log4perl.logger.WSR_Utils.form_order=DEBUG, A1
#log4perl.logger.WSR_New_Worker_Return.create_wsr_records=DEBUG, A1
#configure SCREEN logger
log4perl.appender.A1=Log::Dispatch::Screen
log4perl.appender.A1.min_level=debug
log4perl.appender.A1.stderr=1
log4perl.appender.A1.layout=Log::Log4perl::Layout::PatternLayout
log4perl.appender.A1.layout.ConversionPattern=%d %-5.5p - %M - %m%n