3

I would like to inject some static labels into my custom logback layout.

What is the proper syntax to define a Map<String, String> in logback.xml?

Basic logback.xml:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="com.example.CustomEncoder">
                <!-- What I've tried -->
                <labels>
                    <key>qwe</key>
                    <value>asd</value>
                </labels>
                <pattern>%message %xException{10}</pattern>
            </layout>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>

CustomEncoder.java:

package com.example;

import ch.qos.logback.classic.PatternLayout;
import ch.qos.logback.classic.spi.ILoggingEvent;

import java.util.Map;

public class Encoder extends PatternLayout {
    
    private Map<String, String> labels;
    
    public void setLabels(Map<String, String> labels) {
        this.labels = labels;
    }
    
    @Override
    public String doLayout(ILoggingEvent event) {
        // do something with labels
        return super.doLayout(event);
    }
}

Andrii Abramov
  • 10,019
  • 9
  • 74
  • 96

0 Answers0