Custom log message with additional custom fields in logback console appender in json format

Custom log message with additional custom fields in logback console appender in json format

I have this appender

<appender name="CONSOLE_JSON" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LogstashEncoder">
        <customFields>{ "name": "${foobar.foo}", "id": "${foobar.foo.Id}"}</customFields>
        
    </encoder>
</appender>

and it generates the logs like:

{"@timestamp":"2025-04-21T20:28:10.501365652Z","@version":"1","message":"This is process log.","logger_name":"com.foo.bar.common.Logger","thread_name":"dev","level":"INFO","level_value":20000,"name":"foobar","Id":"1"} 

I need to append the timestamp and loggername to the message filed so it looks like :

"message":" 025-04-21T20:28:10.5013 [com.foo.bar.common.Logger] This is process log."

how to do that? Just to note that I also tried using LoggingEventCompositeJsonEncoder but had no success

Answer

Use the LoggingEventCompositeJsonEncoder with a PatternLayoutProvider

<encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
    <providers>
        <!-- add other providers as desired -->
        <!-- ... -->

        <pattern>
            <pattern>
                { "message": "%date{STRICT} [%logger] %message" }
            </pattern>
        </pattern>
    </providers>
</encoder>

Enjoyed this article?

Check out more content on our blog or follow us on social media.

Browse more articles