ERROR in ch.qos.logback.core.joran.spi.Interpreter- no applicable action for [maxHistory]

Viewed 2521
When i am using spring boot in my application i am getting below error while starting the spring boot application main method. Please note that  application is running in kotlin and we are triggering spring boot start up from a seperate class. when i run the application from workspace it run successfully and start up but launching the application from a packaged  jar throws this error.

java.lang.IllegalStateException: Logback configuration error detected: ERROR in ch.qos.logback.core.joran.spi.Interpreter@20:21 - no applicable action for [maxHistory], current ElementPath is [[configuration][appender][maxHistory]] ERROR in ch.qos.logback.core.joran.spi.Interpreter@37:21 - no applicable action for [maxHistory], current ElementPath is [[configuration][appender][maxHistory]] ERROR in ch.qos.logback.core.joran.spi.Interpreter@54:21 - no applicable action for [maxHistory], current ElementPath is [[configuration][appender][maxHistory]] at org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:169) at org.springframework.boot.logging.logback.LogbackLoggingSystem.reinitialize(LogbackLoggingSystem.java:222) at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:73) at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60) at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:118) at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:306) at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:281) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:239) at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216) at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127) at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:80) at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53) at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:345) at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1237) at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)

without using spring boot it is working absolutely fine. I saw this post
Logback file error: no applicable action for [configuration], current ElementPath is [[configuration][configuration]] but it didn't help.

my logback.xml:

The tag in the logback is creating the issue how to resolve it ?


    <appender name="HealthRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>${app.logpath:-log}/${log.base.name}-health.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${app.logpath:-log}/${log.base.name}-health-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
                <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                    <maxFileSize>500MB</maxFileSize>
                </timeBasedFileNamingAndTriggeringPolicy>
            </rollingPolicy>
    
    
            <!-- Number of days of log files to keep -->
            <maxHistory>14</maxHistory>
        </appender>
    
My pom has multipl dependencies but below are some springboot dependencies which this code uses:
 <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot</artifactId>
             <version>2.3.4.RELEASE</version>
         </dependency>
 
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
             <version>2.3.4.RELEASE</version>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter</artifactId>
             <version>2.3.4.RELEASE</version>
             <exclusions>
                 <exclusion>
                     <groupId>org.springframework.boot</groupId>
                     <artifactId>spring-boot-starter-logging</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
 
         <dependency>
       ```      <groupId>org.springframework</groupId>
             <artifactId>spring-core</artifactId>```
             <version>5.3.8</version>
         </dependency>

I checked multiple posts on this forum but there doesn't seems to be a solution fitting in this case. without springboot the application running fine.

1 Answers

Edit your logback file as follows:

<appender name="HealthRollingFileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${app.logpath:-log}/${log.base.name}-health.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${app.logpath:-log}/${log.base.name}-health-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
        <!-- Number of days of log files to keep -->
        <maxHistory>14</maxHistory>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
             <maxFileSize>500MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
     </rollingPolicy>
</appender>
Related