`fieldNames` attribute throws IllegalStateException
pyaqubzade opened this issue · 2 comments
pyaqubzade commented
Describe the bug
When I try to override some field names Logback throws java.lang.IllegalStateException: Logback configuration error detected:
To Reproduce
Steps to reproduce the behavior:
- Use this configuration on the Spring Boot application. (logback-spring.xml)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProfile name="dev">
<appender name="CONSOLE_LOGSTASH" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="net.logstash.logback.encoder.LogstashEncoder">
<fieldNames>
<loggerName>logger.name</loggerName>
<!-- <threadName>logger.thread_name</threadName>-->
<stackTrace>error.stack</stackTrace>
<!-- <throwableMessage>error.message</throwableMessage>-->
<!-- <throwableClassName>error.kind</throwableClassName>-->
</fieldNames>
</encoder>
</appender>
<root level="INFO" additivity="false">
<appender-ref ref="CONSOLE_LOGSTASH"/>
</root>
</springProfile>
<springProfile name="integration">
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
</springProfile>
</configuration>
- Run application with develop profile
- Application will throw exception similar to below example
Logging system failed to initialize using configuration from 'null'
java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@9:33 - no applicable action for [loggerName], current ElementPath is [[configuration][appender][encoder][fieldNames][loggerName]]
at spring.boot@2.6.7/org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:179)
at spring.boot@2.6.7/org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)
at spring.boot@2.6.7/org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
at spring.boot@2.6.7/org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:313)
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:282)
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:240)
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216)
at spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
at spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
at spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
at spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
at spring.boot@2.6.7/org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
at spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
at spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
at spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
at spring.boot@2.6.7/org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:339)
at spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:297)
at spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:1312)
at spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
at app/com.example.Application.main(Application.java:14)
{"@timestamp":"2023-02-14T13:28:48.704+04:00","@version":"1","message":"Application run failed","logger_name":"org.springframework.boot.SpringApplication","thread_name":"main","level":"ERROR","level_value":40000,"error.stack":"java.lang.IllegalStateException: java.lang.IllegalStateException: Logback configuration error detected: \r\nERROR in ch.qos.logback.core.joran.spi.Interpreter@9:33 - no applicable action for [loggerName], current ElementPath is [[configuration][appender][encoder][fieldNames][loggerName]]\r\n\tat spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:328)\r\n\tat spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:282)\r\n\tat spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:240)\r\n\tat spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216)\r\n\tat spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)\r\n\tat spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)\r\n\tat spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)\r\n\tat spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)\r\n\tat spring.boot@2.6.7/org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)\r\n\tat spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)\r\n\tat java.base/java.util.ArrayList.forEach(ArrayList.java:1511)\r\n\tat spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)\r\n\tat spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)\r\n\tat spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)\r\n\tat spring.boot@2.6.7/org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:339)\r\n\tat spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:297)\r\n\tat spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:1312)\r\n\tat spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)\r\n\tat app/com.example.Application.main(Application.java:14)\r\nCaused by: java.lang.IllegalStateException: Logback configuration error detected: \r\nERROR in ch.qos.logback.core.joran.spi.Interpreter@9:33 - no applicable action for [loggerName], current ElementPath is [[configuration][appender][encoder][fieldNames][loggerName]]\r\n\tat spring.boot@2.6.7/org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:179)\r\n\tat spring.boot@2.6.7/org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)\r\n\tat spring.boot@2.6.7/org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)\r\n\tat spring.boot@2.6.7/org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)\r\n\tat spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:313)\r\n\t... 18 common frames omitted\r\n"}
Exception in thread "main" java.lang.IllegalStateException: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@9:33 - no applicable action for [loggerName], current ElementPath is [[configuration][appender][encoder][fieldNames][loggerName]]
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:328)
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:282)
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:240)
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:216)
at spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:176)
at spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:169)
at spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:143)
at spring.context@5.3.19/org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:131)
at spring.boot@2.6.7/org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:85)
at spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.lambda$environmentPrepared$2(SpringApplicationRunListeners.java:66)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:120)
at spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.doWithListeners(SpringApplicationRunListeners.java:114)
at spring.boot@2.6.7/org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:65)
at spring.boot@2.6.7/org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:339)
at spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:297)
at spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:1312)
at spring.boot@2.6.7/org.springframework.boot.SpringApplication.run(SpringApplication.java:1301)
at app/com.example.Application.main(Application.java:14)
Caused by: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@9:33 - no applicable action for [loggerName], current ElementPath is [[configuration][appender][encoder][fieldNames][loggerName]]
at spring.boot@2.6.7/org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:179)
at spring.boot@2.6.7/org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)
at spring.boot@2.6.7/org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)
at spring.boot@2.6.7/org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:132)
at spring.boot@2.6.7/org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:313)
... 18 more
Process finished with exit code 1
Expected behavior
Usual logs with new field names
Additional context
- logstash-logback-encoder version 7.2
- logback version 1.2.11
- jackson version 2.13.2
- java version 17
philsttr commented
Use <logger>
instead of <loggerName>
From the readme...
For LoggingEvents, see
LogstashFieldNames
for all the field names that can be customized. Each java field name in that class is the name of the xml element that you would use to specify the field name (e.g.logger
,levelValue
).
pyaqubzade commented
I have changed argument names to
<fieldNames>
<logger>logger.name</logger>
<thread>logger.thread_name</thread>
<stackTrace>error.stack</stackTrace>
</fieldNames>
and used providers for exceptions
<provider class="net.logstash.logback.composite.loggingevent.ThrowableMessageJsonProvider">
<fieldName>error.message</fieldName>
</provider>
<provider class="net.logstash.logback.composite.loggingevent.ThrowableClassNameJsonProvider">
<fieldName>error.kind</fieldName>
</provider>