Closed
Description
Description
My application is running on SpringBoot 2.7.13. I have an appender defined like
Configuration:
status: warn
appenders:
RollingFile:
- name: LogToRollingFileWithPattern
filePattern: application-%i.log
PatternLayout:
Pattern: "%level %d{DEFAULT_MICROS} [%t] %c{1} %X{AWS-XRAY-TRACE-ID} - %msg%n"
Policies:
SizeBasedTriggeringPolicy:
size: 1MB
DirectWriteRolloverStrategy:
maxFiles: 5
Loggers:
Root:
level: info
AppenderRef:
- ref: LogToRollingFileWithPattern
Once I start the application the exception is printed in console and file are not created.
Everything works with DefaultRolloverStrategy and files are created as expected
Configuration
Version: 2.17.2
Operating system: Windows 10
JDK: JDK 17
Logs
2023-07-31 18:35:38,086 main ERROR An exception occurred processing Appender LogToRollingFileWithPattern java.lang.NullPointerException: Cannot invoke "java.io.File.mkdirs()" because the return value of "java.io.File.getParentFile()" is null
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.createParentDir(RollingFileManager.java:253)
at org.apache.logging.log4j.core.appender.FileManager.createOutputStream(FileManager.java:191)
at org.apache.logging.log4j.core.appender.OutputStreamManager.getOutputStream(OutputStreamManager.java:165)
at org.apache.logging.log4j.core.appender.OutputStreamManager.writeToDestination(OutputStreamManager.java:250)
at org.apache.logging.log4j.core.appender.FileManager.writeToDestination(FileManager.java:277)
at org.apache.logging.log4j.core.appender.rolling.RollingFileManager.writeToDestination(RollingFileManager.java:275)
at org.apache.logging.log4j.core.appender.OutputStreamManager.flushBuffer(OutputStreamManager.java:283)
at org.apache.logging.log4j.core.appender.OutputStreamManager.flush(OutputStreamManager.java:294)
at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.directEncodeEvent(AbstractOutputStreamAppender.java:217)
at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.tryAppend(AbstractOutputStreamAppender.java:208)
at org.apache.logging.log4j.core.appender.AbstractOutputStreamAppender.append(AbstractOutputStreamAppender.java:199)
at org.apache.logging.log4j.core.appender.RollingFileAppender.append(RollingFileAppender.java:312)
at org.apache.logging.log4j.core.config.AppenderControl.tryCallAppender(AppenderControl.java:161)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender0(AppenderControl.java:134)
at org.apache.logging.log4j.core.config.AppenderControl.callAppenderPreventRecursion(AppenderControl.java:125)
at org.apache.logging.log4j.core.config.AppenderControl.callAppender(AppenderControl.java:89)
at org.apache.logging.log4j.core.config.LoggerConfig.callAppenders(LoggerConfig.java:675)
at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:633)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:616)
at org.apache.logging.log4j.core.config.LoggerConfig.logParent(LoggerConfig.java:666)
at org.apache.logging.log4j.core.config.LoggerConfig.processLogEvent(LoggerConfig.java:635)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:616)
at org.apache.logging.log4j.core.config.LoggerConfig.log(LoggerConfig.java:552)
at org.apache.logging.log4j.core.config.DefaultReliabilityStrategy.log(DefaultReliabilityStrategy.java:63)
at org.apache.logging.log4j.core.Logger.log(Logger.java:161)
at org.apache.logging.log4j.spi.AbstractLogger.tryLogMessage(AbstractLogger.java:2205)
at org.apache.logging.log4j.spi.AbstractLogger.logMessageTrackRecursion(AbstractLogger.java:2159)
at org.apache.logging.log4j.spi.AbstractLogger.logMessageSafely(AbstractLogger.java:2142)
at org.apache.logging.log4j.spi.AbstractLogger.logMessage(AbstractLogger.java:2022)
at org.apache.logging.log4j.spi.AbstractLogger.logIfEnabled(AbstractLogger.java:1875)
at org.apache.commons.logging.LogAdapter$Log4jLog.log(LogAdapter.java:266)
at org.apache.commons.logging.LogAdapter$Log4jLog.info(LogAdapter.java:230)
at org.springframework.boot.SpringApplication.logStartupProfileInfo(SpringApplication.java:637)
at org.springframework.boot.SpringApplication.prepareContext(SpringApplication.java:378)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:306)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1303)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1292)
at com.example.Application.main(Application.java:21)
Reproduction
Errors appears right after application start. It happens during creation a directory for logs
However if we replace file.getParentFile()
with file.getAbsoluteFile().getParentFile()
it returns a correct non null File