springboot添加logback+kafka:日志同步到kafka

≡放荡痞女 提交于 2019-12-09 19:08:34

需求:日志同步到kafka。

在网上找的资料,自己配置时出现的很多问题,这里记录一下,也供大家借鉴一下。

首先加入依赖:

// https://mvnrepository.com/artifact/com.github.danielwegener/logback-kafka-appender
implementation group: 'com.github.danielwegener', name: 'logback-kafka-appender', version: '0.2.0-RC2'

logback-spring-kafka.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <contextName>logback</contextName>
    <property resource="application.properties"/>
    <springProperty scope="context" name="LOGBACK_SERVERS" source="logback.servers"/>
    <property name="LOG_HOME" value="/data/logs/log"/>
    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>-->
            <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%t] [%-5p] [%C] [%L] %m%n</pattern>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${LOG_HOME}/allocation.log</File>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/allocation.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!--日志文件最大的大小-->
            <!-- 日志文件不能超过3GB,若超过3GB,日志文件会以索引0开始,命名日志文件,例如fss_task.0.log -->
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>3GB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <!--<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}[:%line] - %msg%n</pattern>-->
            <!--<pattern>%-15d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{0}[%file:%line] - %msg%n %ex{2}</pattern>-->
            <pattern>[%d{yyyy-MM-dd' 'HH:mm:ss.sss}] [%t] [%-5p] [%C] [%L] %m%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--输出到kafka-->
    <appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <topic>ledger_logs</topic>
        <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy"/>
        <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>
        <producerConfig>bootstrap.servers=${LOGBACK_SERVERS}</producerConfig>
    </appender>


    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
        <appender-ref ref="kafkaAppender"/>
    </root>
</configuration>

application.properties中添加(如果使用的logback-spring.xml默认文件名,这里可以不加):

logging.config=classpath:logback-spring-kafka.xml

这里注意一下:

1.logback.servers是application.properties配置文件中的变量,如果使用配置文件中的变量,logback的xml名字不能是‘logback-spring.xml’等几个默认的文件名,因为logback的xml文件会先于配置文件加载,这样取不到变量(在网上找的资料说必须用logback-spring.xml这个名字才能取到变量,反正我的情况取不到。其他几个默认名字大家可以自己搜一下)。

2.输出到kafka的配置,name="kafkaAppender",kafkaAppender这个名字也不能更换,否则会一直报6000ms的超时错误。

 

至于kafka的安装这里就不做介绍了,大家可以自己去搜资料,注意一下依赖和kafka版本就是了。
 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!