logback在哪里初始化编码器字段?

时间:2017-08-09 15:34:11

标签: logback encoder

有人可以告诉我logback在哪里初始化编码器字段 OutputStreamAppender?

appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>test.json</file>
        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
            <pattern>
                <pattern>
                    {
                        "severity": "%level"
                    }
                </pattern>
            </pattern>
            </providers>
        </encoder>
    </appender>

1 个答案:

答案 0 :(得分:0)

每个appender都是通过ch.qos.logback.core.joran.action.AppenderAction上的调用实例化的,AppenderAction的end()方法在实际的appender上调用start()

对于扩展OutputStreamAppender的appender,这涉及到OutputStreamAppender.setOutputStream()的调用,后者又会调用OutputStreamAppender.encoderInit()

  • 对于ConsoleAppendersetOutputStream()直接从start()
  • 调用
  • 对于FileAppenderstart()调用openFile()然后调用setOutputStream()

因此,总而言之,Logback通过扩展encoderInit()的任何start()上的Appender方法调用OutputStreamAppender