zoukankan      html  css  js  c++  java
  • logback kafkaAppender输出日志到kafka

    官网地址https://github.com/danielwegener/logback-kafka-appender

    本文以spring boot项目为基础,更多的信息,请参考官网

    https://github.com/danielwegener/logback-kafka-appender

    使用maven引入所需要的jar包

         <dependency>
                <groupId>com.github.danielwegener</groupId>
                <artifactId>logback-kafka-appender</artifactId>
                <version>0.2.0-RC1</version>
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-classic</artifactId>
                <!--<version>1.2.3</version>
                <scope>runtime</scope>-->
            </dependency>
            <dependency>
                <groupId>ch.qos.logback</groupId>
                <artifactId>logback-core</artifactId>
                <!--<version>1.2.3</version>-->
            </dependency>

    配置logback-spring.xml,增加一个appender节点

    <appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%message %n</pattern>
                <charset>utf8</charset>
            </encoder>
            <topic>rmcloud-gateway-audit-log</topic>
            <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy"/>
            <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>
         <!--注意此处应该是spring boot中的kafka配置属性--> <producerConfig>bootstrap.servers=127.0.0.1:9092</producerConfig>
         <producerConfig>retries=1</producerConfig>

        <producerConfig>batch-size=16384</producerConfig>
        <producerConfig>buffer-memory=33554432</producerConfig>
        <producerConfig>properties.max.request.size==2097152</producerConfig>
    </appender>
    <root level="INFO">
       <appender-ref ref="kafkaAppender"/>
    </root>

    自定义regular Filter 

    import ch.qos.logback.classic.spi.ILoggingEvent;
    import ch.qos.logback.core.filter.Filter;
    import ch.qos.logback.core.spi.FilterReply;
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.vcredit.rmcloud.gateway.bean.JsonResult;
    import com.vcredit.rmcloud.gateway.bean.RmcloudConstant;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    
    /**
     * 扩展logback filter,过虑rmcloud的日志,输出到kafka
     *
     * @author lee
     * @date 2018/9/11
     */
    
    @Slf4j
    public class LogKafkaFilter extends Filter<ILoggingEvent> {
        @Override
        public FilterReply decide(ILoggingEvent iLoggingEvent) {
    
            String message = iLoggingEvent.getMessage();
            /**
             * 此处是业务代码,可根据自己 的业务代码实现
             */
            if (StringUtils.isNotBlank(message)) {
            JSONObject auditLog
    = JSON.parseObject(message); log.info("responseBody:" + auditLog.get("responseBody").toString()); JsonResult jsonResult = JSON.parseObject(auditLog.get("responseBody").toString(), JsonResult.class); if (auditLog.get("serviceId").toString().startsWith(RmcloudConstant.SERVICE_ID_RMCLOUD_START)) { return FilterReply.ACCEPT; } } return FilterReply.DENY; } }

    将自定义的Filter加入到kafkaAppender中

    <appender name="kafkaRmcloudAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
            <filter class="com.xx.xx.xx.filter.LogKafkaFilter"/>
            <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                <pattern>%message %n</pattern>
                <charset>utf8</charset>
            </encoder>
            <topic>rmcloud-gateway-audit-log</topic>
            <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy"/>
            <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy"/>
            <producerConfig>bootstrap.servers=${kafkaServers}</producerConfig>
        </appender>

    这样过滤不需要日志内容

    另外,在github上发现另外一个KafkaAppener

    https://github.com/johnmpage/logback-kafka
  • 相关阅读:
    js 函数 常用事件 document事件 window对象
    Java API Object
    Java 匿名对象 内部类 包的声明与访问 访问修饰符
    Java关键字 this super final static
    Java 多态 构造方法
    Java 抽象类 接口
    Java Server Pages----JSP
    JAVA Web -----Servlet简介
    JAVA web 会话技术Cookie&Session
    JAVA中常用的API -----(一)Object、String类
  • 原文地址:https://www.cnblogs.com/lixyu/p/9629712.html
Copyright © 2011-2022 走看看