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