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"/>
        <producerConfig>bootstrap.servers=127.0.0.1:9092</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

原文地址:https://www.cnblogs.com/lixyu/p/9629712.html

时间: 2024-10-10 19:47:56

logback kafkaAppender输出日志到kafka的相关文章

使用logback来输出日志

日志级别--level debug:调试,从名字可以看出其作用.程序中报错无法解决时,使用调试来查看更多错误信息.在mybatis中使用这种日志才会输出sql语句.debug的输出量太大,而且不懂源码的人很多都看不懂,还有很多没什么实际作用的日志信息刷屏,只适合报异常程序的调试. info:信息,信息量比debug少很多,只会输出一些重要的信息,适合开发时使用. warn:警告,通常是可以修复的,不修复也不一定会引发异常,有时候是一些提示信息,但是比info信息更加重要 error:错误,很明显

springboot的日志框架slf4j (使用logback输出日志以及使用)

1.为什么使用logback? --在开发中不建议使用System.out因为大量的使用会增加资源的消耗.因为使用System.out是在当前线程执行的,写入文件也是写入完毕之后才继续执行下面的程序.而使用Log工具不但可以控制日志是否输出,怎么输出,它的处理机制也是通知写日志,继续执行后面的代码不必等日志写完. --个人推荐使用SLF4J(Simple Logging Fa?ade For Java)的logback来输出日志,其比log4j效率高.     --Spring Boot 提供了

logback KafkaAppender 写入Kafka队列,集中日志输出.

为了减少应用服务器对磁盘的读写,以及可以集中日志在一台机器上,方便使用ELK收集日志信息,所以考虑做一个jar包,让应用集中输出日志 网上搜了一圈,只发现有人写了个程序在github 地址:https://github.com/johnmpage/logback-kafka 本来打算引用一下这个jar就完事了,没想到在pom里下不下来,只好把源码下了,拷贝了代码过来,自己修改一下. 首先,安装一个Kafka,作为一个懒得出神入化得程序员,我选择的安装方式是 启动zookeeper容器 docke

SpringBoot+logback实现按业务输出日志到不同的文件

公司有个项目,需要和几个第三方系统对接.这种项目,日志一定要记录详细,不然出了问题就是各种甩锅.虽然项目里面和第三方系统对接相关的业务记录的日志很详细,但是由于整个项目的日志都在一个文件中,排查问题时比较麻烦.因此希望可以把这些和第三方对接的日志生成在另外一个单独的文件.这也就是标题中的实现按业务输出日志到不同的文件,下面开始讲解具体的实现方案. 一.方案 由于需要按业务生成不同的日志文件,看到按业务来区分,我的第一感觉就是业务其实是可以按包名来区分的.所以其实我们只要实现不同的包下面的日志输出

Spring Boot 使用 Log4j2 &amp; Logback 输出日志到 EKL

文章目录 1.ELK 介绍 2.环境.软件准备 3.ELK 环境搭建 4.Spring Boot 配置示例 4.1.Log4j2 方式配置 4.2.Logback 方式配置 1.ELK 介绍 ELK 是 Elasticsearch , Logstash, Kibana 的缩写,Elasticsearch 是开源分布式搜索引擎,提供搜集.分析.存储数据等功能,Logstash 主要是用来日志的搜集.分析.过滤日志的工具,Kibana 为 Elasticsearch 提供分析和可视化的 Web 平台

日志打入kafka改造历程-我们到底能走多远系列49

方案 日志收集的方案有很多,包括各种日志过滤清洗,分析,统计,而且看起来都很高大上.本文只描述一个打入kafka的功能. 流程:app->kafka->logstash->es->kibana 业务应用直接将日志打入kafka,然后由logstash消费,数据进入es. 另一方面,应用在服务器上会打日志文件. 如图: 详细 初步实现 首先,我们来初步实现这个方案,搭建elk略去不谈,其中特别注意各个版本的兼容.这里主要在代码层面讲解如何实现的历程. 要将日志数据写入kafka,我们

logback框架之——日志加拿大28源码出售分割所带来的潜在问题

源码:logback-test.xml文件如下加拿大28源码出售(www.1159880099.com)QQ1159880099 ,有2个需要我们重点关注的参数:fileNamePattern:这里的日志文件名变动的部分是年月日时,外加1个文件分割自增变量,警告,年月日时的数值依赖于系统时间,自增变量依赖logback框架里运行时的内存变量.maxFileSize:这里日志文件分割的条件为日志文件大小达到1M. 输出日志的源码如下,需要注意的是:我们用while循环输出日志,比正常的日志输出强度

对于Android系统Log输出日志的封装LogUtils

MainActivity如下: package cc.cn.logutil; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 对于Android系统Log输出日志的封装LogUtils * 1 可修改LogUtils中的LEVEL值觉得哪些级别的日志可以输出. * 所以方便选择性输出日志或者屏蔽日志输出 * 2 输出的日志除了本想输出的信息外还包含了该日志输出时所属 * 的线程,类,方法名,已经在该方法

【转】kettle 的内存设置及输出日志的时间类型

本文转载自:http://blog.csdn.net/dqswuyundong/archive/2010/10/19/5952004.aspx 设置kettle的内存 REM ******************************************************************REM ** Set java runtime options                                     **REM ** Change 256m to high