通过 xml 配置的 Logback 列表属性

Logback list properties configured via xml

我正在编写自己的布局,我希望能够将配置文件中的值列表传递给它。

我的布局代码:

public class MyPatternLayout extends PatternLayout {

    private ArrayList<String> test;

    public ArrayList<String> getTest() {
        return test;
    }

    public void setTest(ArrayList<String> test) {
        this.test = test;
    }

    @Override
    public String doLayout(ILoggingEvent event) {
        return test.stream().collect(Collectors.joining(", ")); //temporary, for testing purposes only
    }
}

配置:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="rpost.MyPatternLayout">
                <pattern>%date{HH:mm:ss.SSS} [%t] %-5p %c{40}:%L - %m%n</pattern>
                <test>value 1</test>
                <test>value 2</test>
            </layout>
        </encoder>
    </appender>

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

上面的示例不起作用 - 它不打印任何内容。

是否可以配置列表属性?怎么做到的?

我找到了以下解决方案:

配置(与问题相同):

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="rpost.MyPatternLayout">
                <pattern>%date{HH:mm:ss.SSS} [%t] %-5p %c{40}:%L - %m%n</pattern>
                <test>value 1</test>
                <test>value 2</test>
            </layout>
        </encoder>
    </appender>

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

Java代码:

public class MyPatternLayout extends PatternLayout {

    private List<String> test = new ArrayList<>();

    public void addTest(String test) {
        this.test.add(test);
    }

    @Override
    public String doLayout(ILoggingEvent event) {
        return test.stream().collect(Collectors.joining(", ")); //temporary, for testing purposes only
    }
}