Buggy code:
public class PropertyConfigurator implements Configurator { static final String CATEGORY_PREFIX = "log4j.category." ; static final String LOGGER_PREFIX = "log4j.logger." ; static final String FACTORY_PREFIX = "log4j.factory" ; static final String ADDITIVITY_PREFIX = "log4j.additivity." ; static final String ROOT_CATEGORY_PREFIX = "log4j.rootCategory" ; static final String ROOT_LOGGER_PREFIX = "log4j.rootLogger" ; static final String APPENDER_PREFIX = "log4j.appender." ; static final String RENDERER_PREFIX = "log4j.renderer." ; static final String THRESHOLD_PREFIX = "log4j.threshold" ; public static final String LOGGER_FACTORY_KEY = "log4j.loggerFactory" ; private static final String INTERNAL_ROOT_NAME = "root" ; protected Hashtable registry = new Hashtable ( 11 ) ; protected LoggerFactory loggerFactory = new DefaultCategoryFactory ( ) ; public void doConfigure ( String configFileName , LoggerRepository hierarchy ) { } public static void configure ( String configFilename ) { } public static void configure ( URL configURL ) { } public static void configure ( Properties properties ) { } public static void configureAndWatch ( String configFilename ) { } public static void configureAndWatch ( String configFilename , long delay ) { } public void doConfigure ( Properties properties , LoggerRepository hierarchy ) { } public void doConfigure ( URL configURL , LoggerRepository hierarchy ) { } protected void configureLoggerFactory ( Properties props ) { } void configureRootCategory ( Properties props , LoggerRepository hierarchy ) { } protected void parseCatsAndRenderers ( Properties props , LoggerRepository hierarchy ) { } void parseAdditivityForLogger ( Properties props , Logger cat , String loggerName ) { } void parseCategory ( Properties props , Logger logger , String optionKey , String loggerName , String value ) { } Appender parseAppender ( Properties props , String appenderName ) { Appender appender = registryGet ( appenderName ) ; if ( appender != null ) { LogLog . debug ( ( ( "Appender<seq2seq4repair_space>\"" + appenderName ) + "\"<seq2seq4repair_space>was<seq2seq4repair_space>already<seq2seq4repair_space>parsed." ) ) ; return appender ; } String prefix = ( PropertyConfigurator . APPENDER_PREFIX ) + appenderName ; String layoutPrefix = prefix + ".layout" ; appender = ( ( Appender ) ( OptionConverter . instantiateByKey ( props , prefix , Appender . class , null ) ) ) ; if ( appender == null ) { LogLog . error ( ( ( "Could<seq2seq4repair_space>not<seq2seq4repair_space>instantiate<seq2seq4repair_space>appender<seq2seq4repair_space>named<seq2seq4repair_space>\"" + appenderName ) + "\"." ) ) ; return null ; } appender . setName ( appenderName ) ; if ( appender instanceof OptionHandler ) { if ( appender . requiresLayout ( ) ) { Layout layout = ( ( Layout ) ( OptionConverter . instantiateByKey ( props , layoutPrefix , Layout . class , null ) ) ) ; if ( layout != null ) { appender . setLayout ( layout ) ; LogLog . debug ( ( ( "Parsing<seq2seq4repair_space>layout<seq2seq4repair_space>options<seq2seq4repair_space>for<seq2seq4repair_space>\"" + appenderName ) + "\"." ) ) ; PropertySetter . setProperties ( layout , props , ( layoutPrefix + "." ) ) ; <START_BUG> activateOptions ( appender ) ; <END_BUG> LogLog . debug ( ( ( "End<seq2seq4repair_space>of<seq2seq4repair_space>parsing<seq2seq4repair_space>for<seq2seq4repair_space>\"" + appenderName ) + "\"." ) ) ; } } PropertySetter . setProperties ( appender , props , ( prefix + "." ) ) ; activateOptions ( appender ) ; LogLog . debug ( ( ( "Parsed<seq2seq4repair_space>\"" + appenderName ) + "\"<seq2seq4repair_space>options." ) ) ; } registryPut ( appender ) ; return appender ; } public void activateOptions ( Object obj ) { } void registryPut ( Appender appender ) { } Appender registryGet ( String name ) { } }

Fix:
activateOptions ( layout ) ;