logfellow / logstash-logback-encoder

Logback JSON encoder and appenders
Apache License 2.0
2.43k stars 407 forks source link

Failed to interpret '%level_value' conversion word #1016

Closed thedevd closed 5 months ago

thedevd commented 5 months ago

Describe the bug Using logLevelValue (field name level_value) in logback throws Failed to interpret '%level_value' conversion word

To Reproduce Steps to reproduce the behavior:

  1. Use this encoder in logback.xml configuration...

    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <pattern>yyyy-MM-dd'T'HH:mm:ss.SSS'Z'</pattern>
                    <timeZone>UTC</timeZone>
                    <fieldName>timestamp</fieldName>
                </timestamp>
                <pattern>
                    <omitEmptyFields>true</omitEmptyFields>
                    <pattern>
                        {
                        "level": "%level",
                        "log_level": "%level_value",
                        "logger": "%logger",
                        "msg": "%message",
                        "trace_id": "%mdc{traceId}"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
  2. See error, or unexpected output

    
    20:55:38,834 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@5487e8ab - There is no conversion class registered for conversion word [level_value]
    20:55:38,834 |-ERROR in ch.qos.logback.core.pattern.parser.Compiler@5487e8ab - [level_value] is not a valid conversion word
    20:55:38,834 |-ERROR in net.logstash.logback.composite.loggingevent.LoggingEventPatternJsonProvider@473e6998 - Invalid [pattern]: Invalid JSON property '//log_level' (was '%level_value'): Failed to interpret '%level_value' conversion word. See previous error statuses for more information. net.logstash.logback.pattern.AbstractJsonPatternParser$JsonPatternException: Invalid JSON property '//log_level' (was '%level_value'): Failed to interpret '%level_value' conversion word. See previous error statuses for more information.
    at net.logstash.logback.pattern.AbstractJsonPatternParser$JsonPatternException: Invalid JSON property '//log_level' (was '%level_value'): Failed to interpret '%level_value' conversion word. See previous error statuses for more information.
    at  at net.logstash.logback.pattern.AbstractJsonPatternParser.parseNode(AbstractJsonPatternParser.java:328)
    at  at net.logstash.logback.pattern.AbstractJsonPatternParser.parseObject(AbstractJsonPatternParser.java:378)
    at  at net.logstash.logback.pattern.AbstractJsonPatternParser.parse(AbstractJsonPatternParser.java:307)
    at  at net.logstash.logback.composite.AbstractPatternJsonProvider.initializeNodeWriter(AbstractPatternJsonProvider.java:104)
    at  at net.logstash.logback.composite.AbstractPatternJsonProvider.start(AbstractPatternJsonProvider.java:85)
    at  at net.logstash.logback.composite.JsonProviders.start(JsonProviders.java:48)
    at  at net.logstash.logback.composite.AbstractCompositeJsonFormatter.start(AbstractCompositeJsonFormatter.java:120)
    at  at net.logstash.logback.encoder.CompositeJsonEncoder.start(CompositeJsonEncoder.java:129)
    at  at ch.qos.logback.core.model.processor.ImplicitModelHandler.postHandleComplex(ImplicitModelHandler.java:208)
    at  at ch.qos.logback.core.model.processor.ImplicitModelHandler.postHandle(ImplicitModelHandler.java:186)
    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.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:208)
    at  at ch.qos.logback.core.joran.GenericXMLConfigurator.doConfigure(GenericXMLConfigurator.java:170)
    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:68)
    at  at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:128)
    at  at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:75)
    at  at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:37)


**Expected behavior**
Although the documentation here https://github.com/logfellow/logstash-logback-encoder?tab=readme-ov-file#providers-for-loggingevents says use field name level_value for Logger level numerical value, but it does not work

* what output did you expect

**Additional context**
Following is the version information

* logstash-logback-encoder 7.4
`"net.logstash.logback" % "logstash-logback-encoder" % "7.4"`
* logback version - 1.4.11
* jackson version - 2.17.0
* java version - 11.0.22
* play framework - 3.0.0
thedevd commented 5 months ago

Oops sorry for incovenience, I think I have to add under to include level_value for numerical log value, however I do not want it to that long I mean 20000 for INFO (I want simply 2)