<!-- Позволяет администратору сменить детализацию уровня логирования в run-time -->
<configuration scan="true" scanPeriod="30 seconds">
    <!-- Экранирование символа доллара -->
    <property scope="context" name="dollar" value="$" />

    <!-- for showing errors during producer initialization -->
    <statusListener class="ch.qos.logback.core.status.OnConsoleStatusListener" />

    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.file}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.SBTTimeBasedRollingPolicy">
            <!--+ ежедневно создается новый файл логов, старый переносится в архив -->
            <fileNamePattern>${log.file}-%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!--+ или когда размер файла логов достигнет размера 50MB -->
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>3</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{60} %X{sourceThread} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--+ Блок настройки для отправки логов Apache Flink (EVTP) в центральную систему журналирования Platform V Monitor  -->
    <appender name="FlinkLogger" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder class="com.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder">
            <layout class="ru.sbt.logback.layout.Grok">
                <message>message</message>
                <timestamp>timestamp</timestamp>
                <level>level</level>
                <needAddThreadToMessage>false</needAddThreadToMessage>
                <fields>
                    <![CDATA[
						name=host        CONST=<имя хоста>
                        name=component   ENV_VARIABLE=COMPONENT
					]]>
                </fields>
            </layout>
        </encoder>
        <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>
        <topic>flink_log</topic>
        <retries>3</retries>
        <interval>1000</interval>
        <multiplier>1</multiplier>
        <producerConfig>client.id=flink_fp_ss_tkles-snaps0001.vm.esrt.cloud.sbrf.ru</producerConfig>
        <producerConfig>bootstrap.servers=tkleq-snaps0001.vm.esrt.cloud.sbrf.ru:9092,tkleq-snaps0002.vm.esrt.cloud.sbrf.ru:9092</producerConfig>
        <producerConfig>security.protocol=SSL</producerConfig>
        <producerConfig>ssl.keystore.location=/opt/Apache/flink/ssl/flink.jks</producerConfig>
        <producerConfig>ssl.keystore.password=<пароль к keystore></producerConfig>
        <producerConfig>ssl.truststore.location=/opt/Apache/flink/ssl/flink.jks</producerConfig>
        <producerConfig>ssl.truststore.password=<пароль к truststore></producerConfig>
        <producerConfig>ssl.endpoint.identification.algorithm=</producerConfig>
        <!--<appender-ref ref="file"/>-->
    </appender>

    <!--+ Блок настроек для отправки логов Apache Kafka в центральную систему журналирования Platform V Monitor -->
    <appender name="KafkaLogger" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder class="com.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder">
            <layout class="ru.sbt.logback.layout.Grok">
                <message>message</message>
                <timestamp>timestamp</timestamp>
                <level>level</level>
                <needAddThreadToMessage>false</needAddThreadToMessage>
                <fields>
                    <![CDATA[
						name=host        CONST=<имя хоста>
                        name=component   CONST=kafka
					]]>
                </fields>
            </layout>
        </encoder>
        <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>
        <topic>flink_log</topic>
        <producerConfig>client.id=flink_fp_ss_host</producerConfig>
        <producerConfig>bootstrap.servers=host:port,host:port</producerConfig>
        <producerConfig>security.protocol=SSL</producerConfig>
        <producerConfig>ssl.keystore.location=/opt/Apache/flink/ssl/flink.jks</producerConfig>
        <producerConfig>ssl.keystore.password=<пароль к keystore></producerConfig>
        <producerConfig>ssl.truststore.location=/opt/Apache/flink/ssl/flink.jks</producerConfig>
        <producerConfig>ssl.truststore.password=<пароль к truststore></producerConfig>
        <producerConfig>ssl.endpoint.identification.algorithm=</producerConfig>
        <!--<appender-ref ref="file"/>-->
    </appender>

    <!--+ Блок настроек для отправки логов универсального обработчика (EVTP) в центральную систему журналирования Platform V Monitor -->
    <appender name="UniversalJobLogger" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
            <layout class="ru.sbt.logback.layout.Grok">
                <message>message</message>
                <timestamp>timestamp</timestamp>
                <level>level</level>
                <needAddThreadToMessage>false</needAddThreadToMessage>
                <unixTimestamp>true</unixTimestamp>
                <fields>
                    <![CDATA[
                        name=operationName MDC=operationName
                        name=stepName      MDC=stepName
                        name=host          CONST=<имя хоста>
                    ]]>
                </fields>
            </layout>
        </encoder>
        <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>
        <topic>flink_log</topic>
        <producerConfig>client.id=flink_fp_ss_host</producerConfig>
        <producerConfig>bootstrap.servers=host:port,host:port</producerConfig>
        <producerConfig>security.protocol=SSL</producerConfig>
        <producerConfig>ssl.keystore.location=/opt/Apache/flink/ssl/flink.jks</producerConfig>
        <producerConfig>ssl.keystore.password=<пароль к keystore></producerConfig>
        <producerConfig>ssl.truststore.location=/opt/Apache/flink/ssl/flink.jks</producerConfig>
        <producerConfig>ssl.truststore.password=<пароль к truststore></producerConfig>
        <producerConfig>ssl.endpoint.identification.algorithm=</producerConfig>
        <!--<appender-ref ref="file"/>-->
    </appender>

    <appender name="ASYNC-UniversalJobLogger" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="UniversalJobLogger"/>
        <discardingThreshold>0</discardingThreshold>
        <queueSize>512</queueSize>
        <neverBlock>false</neverBlock>
    </appender>
    <appender name="ASYNC-FlinkLogger" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="FlinkLogger"/>
        <discardingThreshold>0</discardingThreshold>
        <queueSize>512</queueSize>
        <neverBlock>false</neverBlock>
    </appender>
    <appender name="ASYNC-KafkaLogger" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="KafkaLogger"/>
        <discardingThreshold>0</discardingThreshold>
        <queueSize>512</queueSize>
        <neverBlock>true</neverBlock>
    </appender>

    <logger name="ru.sbt" level="DEBUG">
        <appender-ref ref="file"/>
    </logger>

    <logger name="ru.sbt.cep.flow.event.process.flow.function.EventHolderTransformer" level="INFO" additivity="false">
        <appender-ref ref="file"/>
        <appender-ref ref="ASYNC-UniversalJobLogger"/>
    </logger>

    <logger name="org.apache.flink" level="INFO">
        <appender-ref ref="file"/>
        <appender-ref ref="ASYNC-FlinkLogger"/>
    </logger>

    <logger name="org.apache.flink.streaming.api.functions.sink.TwoPhaseCommitSinkFunction" level="WARN">
        <appender-ref ref="file"/>
        <appender-ref ref="ASYNC-FlinkLogger"/>
    </logger>

    <logger name="org.apache.flink.runtime.checkpoint.CheckpointCoordinator" level="WARN">
        <appender-ref ref="file"/>
        <appender-ref ref="ASYNC-FlinkLogger"/>
    </logger>

    <logger name="akka" level="INFO">
        <appender-ref ref="file"/>
    </logger>

    <logger name="org.apache.kafka" level="INFO">
        <appender-ref ref="file"/>
        <appender-ref ref="ASYNC-KafkaLogger"/>
    </logger>

    <logger name="org.apache.hadoop" level="INFO">
        <appender-ref ref="file"/>
    </logger>

    <logger name="org.apache.zookeeper" level="INFO">
        <appender-ref ref="file"/>
    </logger>

    <logger name="org.apache.flink.shaded.akka.org.jboss.netty.channel.DefaultChannelPipeline" level="ERROR">
        <appender-ref ref="file"/>
        <appender-ref ref="ASYNC-FlinkLogger"/>
    </logger>
</configuration>