Native build error when I use custom logging config;
Comment From: wilkinsona
Unfortunately, it's very hard to diagnose a problem from a screenshot. The failure's occurring during ahead-of-time processing so the code is running on the JVM. It would appear that the user building the application was unable to create the \\home\log\2023-01-16\ directory. That's probably related to permissions and is out of Spring Boot's control.
If you would like us to spend some more time investigating, please spend some time providing a complete yet minimal sample that reproduces the problem. You can share it with us by pushing it to a separate repository on GitHub or by zipping it up and attaching it to this issue.
Comment From: jumtp
I found that this may not be a Native problem. This error will occur as long as SpringBoot3 is used
Example: https://github.com/jumtp/SpringBoot3-log-build-error
Please check README
Comment From: wilkinsona
When you set the version to 2.7.6, the log storage path will be created automatically.
This is not what I see. I see the same failure with both Spring Boot 2.7.x (Logback 1.2.x) and 3.0.x (Logback 1.4.x).
The behaviour is due to Logback and is out of Spring Boot's control. This can be shown by renaming logback-spring-pro.xml to logback.xml and modifying the main application class as follows:
package com.example.demo;
import org.slf4j.LoggerFactory;
import org.slf4j.Logger;
public class DemoApplication {
private static final Logger log = LoggerFactory.getLogger(DemoApplication.class);
public static void main(String[] args) {
}
}
These changes remove Spring Boot's involvement. If you run the application's main method, you will see the same failure, albeit reported directly by Logback rather than through Spring Boot:
08:13:44,410 |-INFO in ch.qos.logback.classic.LoggerContext[default] - This is logback-classic version 1.4.5
08:13:44,434 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
08:13:44,438 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/Users/awilkinson/dev/temp/SpringBoot3-log-build-error/target/classes/logback.xml]
08:13:44,521 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [INFO]
08:13:44,521 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
08:13:44,532 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1669712678 - setting totalSizeCap to 2 GB
08:13:44,534 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1669712678 - Archive files will be limited to [20 MB] each.
08:13:44,546 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1669712678 - No compression will be used
08:13:44,547 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1669712678 - Will use the pattern //home//log//%d{yyyy-MM-dd}/log_info_%d{yyyy-MM-dd}.%i.log for the active file
08:13:44,564 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1e9e725a - The date pattern is 'yyyy-MM-dd' from file name pattern '//home//log//%d{yyyy-MM-dd}/log_info_%d{yyyy-MM-dd}.%i.log'.
08:13:44,564 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1e9e725a - Roll-over at midnight.
08:13:44,568 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@1e9e725a - Setting initial period to Tue Jan 17 08:13:44 GMT 2023
08:13:44,582 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
08:13:44,590 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[INFO] - Active log file name: //home//log//2023-01-17/log_info_2023-01-17.0.log
08:13:44,590 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[INFO] - File property is set to [null]
08:13:44,708 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[INFO] - Failed to create parent directories for [/home/log/2023-01-17/log_info_2023-01-17.0.log]
08:13:44,722 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[INFO] - openFile(null,true) call failed. java.io.FileNotFoundException: /home/log/2023-01-17/log_info_2023-01-17.0.log (No such file or directory)
at java.io.FileNotFoundException: /home/log/2023-01-17/log_info_2023-01-17.0.log (No such file or directory)
at at java.base/java.io.FileOutputStream.open0(Native Method)
at at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293)
at at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
at at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:26)
at at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:206)
at at ch.qos.logback.core.FileAppender.start(FileAppender.java:126)
at at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:100)
at at ch.qos.logback.core.model.processor.AppenderModelHandler.postHandle(AppenderModelHandler.java:84)
at at ch.qos.logback.core.model.processor.DefaultProcessor.secondPhaseTraverse(DefaultProcessor.java:257)
at at ch.qos.logback.core.model.processor.DefaultProcessor.secondPhaseTraverse(DefaultProcessor.java:253)
at at ch.qos.logback.core.model.processor.DefaultProcessor.traversalLoop(DefaultProcessor.java:90)
at at ch.qos.logback.core.model.processor.DefaultProcessor.process(DefaultProcessor.java:106)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.processModel(GenericXMLConfigurator.java:200)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:166)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:122)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:65)
at at ch.qos.logback.classic.util.DefaultJoranConfigurator.configureByResource(DefaultJoranConfigurator.java:53)
at at ch.qos.logback.classic.util.DefaultJoranConfigurator.configure(DefaultJoranConfigurator.java:34)
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:98)
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:77)
at at ch.qos.logback.classic.spi.LogbackServiceProvider.initializeLoggerContext(LogbackServiceProvider.java:50)
at at ch.qos.logback.classic.spi.LogbackServiceProvider.initialize(LogbackServiceProvider.java:41)
at at org.slf4j.LoggerFactory.bind(LoggerFactory.java:183)
at at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:170)
at at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:455)
at at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:441)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:390)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:416)
at at com.example.demo.DemoApplication.<clinit>(DemoApplication.java:8)
08:13:44,722 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [WARN]
08:13:44,722 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
08:13:44,722 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1684792003 - setting totalSizeCap to 2 GB
08:13:44,722 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1684792003 - Archive files will be limited to [10 MB] each.
08:13:44,723 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1684792003 - No compression will be used
08:13:44,723 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@1684792003 - Will use the pattern //home//log//%d{yyyy-MM-dd}/log_warn_%d{yyyy-MM-dd}.%i.log for the active file
08:13:44,723 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@797badd3 - The date pattern is 'yyyy-MM-dd' from file name pattern '//home//log//%d{yyyy-MM-dd}/log_warn_%d{yyyy-MM-dd}.%i.log'.
08:13:44,723 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@797badd3 - Roll-over at midnight.
08:13:44,723 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@797badd3 - Setting initial period to Tue Jan 17 08:13:44 GMT 2023
08:13:44,735 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
08:13:44,736 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[WARN] - Active log file name: //home//log//2023-01-17/log_warn_2023-01-17.0.log
08:13:44,736 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[WARN] - File property is set to [null]
08:13:44,849 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[WARN] - Failed to create parent directories for [/home/log/2023-01-17/log_warn_2023-01-17.0.log]
08:13:44,860 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[WARN] - openFile(null,true) call failed. java.io.FileNotFoundException: /home/log/2023-01-17/log_warn_2023-01-17.0.log (No such file or directory)
at java.io.FileNotFoundException: /home/log/2023-01-17/log_warn_2023-01-17.0.log (No such file or directory)
at at java.base/java.io.FileOutputStream.open0(Native Method)
at at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293)
at at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
at at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:26)
at at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:206)
at at ch.qos.logback.core.FileAppender.start(FileAppender.java:126)
at at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:100)
at at ch.qos.logback.core.model.processor.AppenderModelHandler.postHandle(AppenderModelHandler.java:84)
at at ch.qos.logback.core.model.processor.DefaultProcessor.secondPhaseTraverse(DefaultProcessor.java:257)
at at ch.qos.logback.core.model.processor.DefaultProcessor.secondPhaseTraverse(DefaultProcessor.java:253)
at at ch.qos.logback.core.model.processor.DefaultProcessor.traversalLoop(DefaultProcessor.java:90)
at at ch.qos.logback.core.model.processor.DefaultProcessor.process(DefaultProcessor.java:106)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.processModel(GenericXMLConfigurator.java:200)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:166)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:122)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:65)
at at ch.qos.logback.classic.util.DefaultJoranConfigurator.configureByResource(DefaultJoranConfigurator.java:53)
at at ch.qos.logback.classic.util.DefaultJoranConfigurator.configure(DefaultJoranConfigurator.java:34)
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:98)
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:77)
at at ch.qos.logback.classic.spi.LogbackServiceProvider.initializeLoggerContext(LogbackServiceProvider.java:50)
at at ch.qos.logback.classic.spi.LogbackServiceProvider.initialize(LogbackServiceProvider.java:41)
at at org.slf4j.LoggerFactory.bind(LoggerFactory.java:183)
at at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:170)
at at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:455)
at at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:441)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:390)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:416)
at at com.example.demo.DemoApplication.<clinit>(DemoApplication.java:8)
08:13:44,860 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - Processing appender named [ERROR]
08:13:44,860 |-INFO in ch.qos.logback.core.model.processor.AppenderModelHandler - About to instantiate appender of type [ch.qos.logback.core.rolling.RollingFileAppender]
08:13:44,860 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@2008966511 - setting totalSizeCap to 2 GB
08:13:44,860 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@2008966511 - Archive files will be limited to [20 MB] each.
08:13:44,860 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@2008966511 - No compression will be used
08:13:44,861 |-INFO in c.q.l.core.rolling.SizeAndTimeBasedRollingPolicy@2008966511 - Will use the pattern //home//log//%d{yyyy-MM-dd}/log_err_%d{yyyy-MM-dd}.%i.log for the active file
08:13:44,861 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@19dc67c2 - The date pattern is 'yyyy-MM-dd' from file name pattern '//home//log//%d{yyyy-MM-dd}/log_err_%d{yyyy-MM-dd}.%i.log'.
08:13:44,861 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@19dc67c2 - Roll-over at midnight.
08:13:44,862 |-INFO in ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP@19dc67c2 - Setting initial period to Tue Jan 17 08:13:44 GMT 2023
08:13:44,873 |-INFO in ch.qos.logback.core.model.processor.ImplicitModelHandler - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
08:13:44,874 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERROR] - Active log file name: //home//log//2023-01-17/log_err_2023-01-17.0.log
08:13:44,874 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[ERROR] - File property is set to [null]
08:13:44,984 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[ERROR] - Failed to create parent directories for [/home/log/2023-01-17/log_err_2023-01-17.0.log]
08:13:44,995 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[ERROR] - openFile(null,true) call failed. java.io.FileNotFoundException: /home/log/2023-01-17/log_err_2023-01-17.0.log (No such file or directory)
at java.io.FileNotFoundException: /home/log/2023-01-17/log_err_2023-01-17.0.log (No such file or directory)
at at java.base/java.io.FileOutputStream.open0(Native Method)
at at java.base/java.io.FileOutputStream.open(FileOutputStream.java:293)
at at java.base/java.io.FileOutputStream.<init>(FileOutputStream.java:235)
at at ch.qos.logback.core.recovery.ResilientFileOutputStream.<init>(ResilientFileOutputStream.java:26)
at at ch.qos.logback.core.FileAppender.openFile(FileAppender.java:206)
at at ch.qos.logback.core.FileAppender.start(FileAppender.java:126)
at at ch.qos.logback.core.rolling.RollingFileAppender.start(RollingFileAppender.java:100)
at at ch.qos.logback.core.model.processor.AppenderModelHandler.postHandle(AppenderModelHandler.java:84)
at at ch.qos.logback.core.model.processor.DefaultProcessor.secondPhaseTraverse(DefaultProcessor.java:257)
at at ch.qos.logback.core.model.processor.DefaultProcessor.secondPhaseTraverse(DefaultProcessor.java:253)
at at ch.qos.logback.core.model.processor.DefaultProcessor.traversalLoop(DefaultProcessor.java:90)
at at ch.qos.logback.core.model.processor.DefaultProcessor.process(DefaultProcessor.java:106)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.processModel(GenericXMLConfigurator.java:200)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:166)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:122)
at at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:65)
at at ch.qos.logback.classic.util.DefaultJoranConfigurator.configureByResource(DefaultJoranConfigurator.java:53)
at at ch.qos.logback.classic.util.DefaultJoranConfigurator.configure(DefaultJoranConfigurator.java:34)
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:98)
at at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:77)
at at ch.qos.logback.classic.spi.LogbackServiceProvider.initializeLoggerContext(LogbackServiceProvider.java:50)
at at ch.qos.logback.classic.spi.LogbackServiceProvider.initialize(LogbackServiceProvider.java:41)
at at org.slf4j.LoggerFactory.bind(LoggerFactory.java:183)
at at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:170)
at at org.slf4j.LoggerFactory.getProvider(LoggerFactory.java:455)
at at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:441)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:390)
at at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:416)
at at com.example.demo.DemoApplication.<clinit>(DemoApplication.java:8)
08:13:44,996 |-INFO in ch.qos.logback.classic.model.processor.LoggerModelHandler - Setting level of logger [com.example.demo] to INFO
08:13:44,996 |-INFO in ch.qos.logback.classic.model.processor.RootLoggerModelHandler - Setting level of ROOT logger to INFO
08:13:44,996 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [INFO] to Logger[ROOT]
08:13:44,997 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [WARN] to Logger[ROOT]
08:13:44,997 |-INFO in ch.qos.logback.core.model.processor.AppenderRefModelHandler - Attaching appender named [ERROR] to Logger[ROOT]
08:13:44,997 |-INFO in ch.qos.logback.core.model.processor.DefaultProcessor@221af3c0 - End of configuration.
08:13:44,997 |-INFO in ch.qos.logback.classic.joran.JoranConfigurator@62bd765 - Registering current configuration as safe fallback point
To avoid the problem I would recommend using different logging configuration in the two different environments. If you have any further questions, please follow up on Stack Overflow or Gitter. As mentioned in the guidelines for contributing, we prefer to use GitHub issues only for bugs and enhancements.
Comment From: jumtp
okay , thanks for you help @wilkinsona