Skip to content

NPE in PatternProcessor when using a UNIX_MILLIS date pattern #2346

@brandonburchett

Description

@brandonburchett

Description

NullPointerException when programmatically creating a logger/appender after file configuration has been loaded.

When configuring a logger at runtime like so, i get a Null Pointer Exception.

final LoggerContext ctx = (LoggerContext) LogManager.getContext(false); final Configuration config = ctx.getConfiguration(); RollingFileAppender appender = RollingFileAppender.newBuilder() .setName("data-file-appender-for-"+topicName) .setLayout(PatternLayout.newBuilder().withPattern("%m%n").build()) .withFilePattern(Path.of(directory.toString(), topicName.toLowerCase() + "_%d{UNIX_MILLIS}").toString()) .withCreateOnDemand(true) .withPolicy(SizeBasedTriggeringPolicy.createPolicy("20MB")) .withStrategy(DirectWriteRolloverStrategy.newBuilder() .withConfig(config) .withMaxFiles("15").build()) .build(); appender.start(); config.addAppender(appender); LoggerConfig loggerConfig = LoggerConfig.newBuilder() .withLoggerName(name) .withAdditivity(false) .withLevel(Level.ALL) .withConfig(config) .build(); loggerConfig.addAppender(appender, null, null); config.addLogger(name, loggerConfig); ctx.updateLoggers(); 

Configuration

<?xml version="1.0" encoding="UTF-8"?> <Configuration status="trace" shutdownHookEnabled="false"> <Appenders> <RollingFile name="default-file" fileName="${sys:log.dir}/appfile.log" filePattern="${sys:log.dir}/appfile%i.log" > <PatternLayout> <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <SizeBasedTriggeringPolicy size="5MB" /> </Policies> <DefaultRolloverStrategy max="5" fileIndex="min" /> </RollingFile> </Appenders> <Loggers>	<Root level="${sys:log.level:-info}"> <AppenderRef ref="default-file"/>	</Root> </Loggers> </Configuration> 

Version: 2.22.0 2.20.0

Operating system: RHEL 8.1

JDK: JDK 17

Logs

java.lang.NullPointerException: Cannot invoke "String.indexOf(int)" because "pattern" is null at org.apache.logging.log4j.core.appender.rolling.PatternProcessor.patternContains(PatternProcessor.java:365) at org.apache.logging.log4j.core.appender.rolling.PatternProcessor.calculateFrequency(PatternProcessor.java:323) at org.apache.logging.log4j.core.appender.rolling.PatternProcessor.<init>(PatternProcessor.java:96) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.<init>(RollingFileManager.java:147) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:755) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager$RollingFileManagerFactory.createManager(RollingFileManager.java:718) at org.apache.logging.log4j.core.appender.AbstractManager.getManager(AbstractManager.java:144) at org.apache.logging.log4j.core.appender.OutputStreamManager.getManager(OutputStreamManager.java:100) at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.getFileManager(RollingFileManager.java:217) at org.apache.logging.log4j.core.appender.RollingFileAppender$Builder.build(RollingFileAppender.java:135) at com.company.AbstractConsumer.createDataLogger(AbstractConsumer.java:151) 

Metadata

Metadata

Assignees

Labels

appenders:RollingAffects log file rolling functionalitybugIncorrect, unexpected, or unintended behavior of existing code

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions