• .NET Core使用NLog通过Kafka实现日志收集

    发布:51Code 时间: 2018-08-24 10:02

  • 一、前言 NET Core越来越受欢迎,因为它具有在多个平台上运行的原始.NET Framework的强大功能。Kafka正迅速成为软件行业的标准消息传递技术。这篇文章简单介绍了如何使用.NET(Core)和Kafk...

  • 一、前言

    NET Core越来越受欢迎,因为它具有在多个平台上运行的原始.NET Framework的强大功能。Kafka正迅速成为软件行业的标准消息传递技术。这篇文章简单介绍了如何使用.NET(Core)和Kafka实现NLog的Target。

    在日常项目开发过程中,Java体系下Spring Boot + Logback很容易就接入了Kafka实现了日志收集,在.NET和.NET Core下一直习惯了使用NLog作为日志组件。为了让微服务环境中dotnet和java的服务都统一的进行日志收集,接下来的文章中会介绍两种语言的统一接入方式。写这个组件的目地是让团队成员不需要编写NLog的JsonLayout从而达到与java服务输出一样格式到kafka的目地,简化开发人员的配置难度,当然代价就是配置不灵活了。

    二、开源

    通过实现NLog的Target,接入kafka将日志传输到Logstash的组件。

    https://github.com/maxzhang1985/NLog.Kafka

    三、使用

    建立项目

    NLog.Kafka组件支持.NET 4.5+和 NETStandard1.6+ ,所在可以在传统.NET使用,当然也支持.NET Core的跨平台使用(Win、Linux、Mac)。

    项目引用

    NLog 4.5.8

    NLog.Kafka

    librdkafka.redist

    引用librdkafka.redist是因为使用了依赖库Confluent.Kafka 0.11.5,Confluent.Kafka 使用了著名的librdkafka开源库,它是用C ++编写的,作为其它的语言(如C ++,C#,Python和Node)的Kafka驱动程序的基础。

    配置

    在项目中建立NLog.config,并设置为Copy always,内容如下:

    <?xml version="1.0" encoding="utf-8" ?>

    <!--nlog 基础配置  第二行throwExceptions开始 上线后关闭-->

    <nlog autoReload="true" xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

      throwExceptions="true" throwConfigExceptions="true" internalLogLevel="Trace" >

      <!-- load NLog.Extended to enable ASP.NET-specific functionality -->

      <targets>

        <target name="queue" xsi:type="kafka" topic="loges" appname="nlogtest" includeMdc="true"  >

          <!-- bootstrap.servers = 127.0.0.1:9092,127.0.0.1:9092,127.0.0.1:9092 -->

          <producerConfig key="bootstrap.servers" value="127.0.0.1:9092" />

          <producerConfig key="queue.buffering.max.messages" value="2000000" />

          <producerConfig key="retry.backoff.ms" value="500" />

          <producerConfig key="message.send.max.retries" value="3" />

        </target>

      </targets>

      <rules>

        <logger name="*" writeTo="queue" />

      </rules>

    </nlog>
    编写测试代码

    class Program

    {

            static void Main(string[] args)

            {

     

                Logger logger = LogManager.GetCurrentClassLogger();

     

                MappedDiagnosticsContext.Set("item1", "haha");

                for(int i = 0; i < 10; i++)

                {

                    logger.Info("hello world");

                    Console.WriteLine("sended");

                }

     

                Console.ReadKey();

            }

    }
    Logstash配置

    input {

        kafka {

           bootstrap_servers => "127.0.0.1:9092"

           group_id => "logstash"

           topics => "loges"

           codec => "json"

        }

    }

     

    output{

      elasticsearch {

            hosts => ["127.0.0.1:9002"]

            index => "log_{[appname]}_%{+YYYY.MM.dd}"

     

      }

      #stdout { codec => rubydebug }

    }

    四、最后

    附上的Demo和开源库地址:https://github.com/maxzhang1985/NLog.Kafka

    GitHub:https://github.com/maxzhang1985/YOYOFx 如果觉还可以请Star下, 欢迎一起交流。

    文章来源:https://www.cnblogs.com/maxzhang1985/p/9522017.html
    上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8103),我们将立即处理。

  • 上一篇:快速上手实践| .NET Core玩转机器学习

    下一篇:微软必应从.NET Core 2.1获得了性能提升

网站导航
Copyright(C)51Code软件开发网 2003-2018 , 沪ICP备16012939号-1