微服务日志之.NET Core使用NLog经过Kafka实现日志收集

1、前言

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

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

2、开源

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

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

3、使用

创建项目

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

项目引用

  • NLog 4.5.8
  • NLog.Kafka
  • librdkafka.redist

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

配置

在项目中创建NLog.config,并设置为Copy always,内容以下:ruby

<?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 }
}

4、最后

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

GitHub:https://github.com/maxzhang1985/YOYOFx 若是觉还能够请Star下, 欢迎一块儿交流。elasticsearch

.NET Core 开源学习群:214741894微服务

个人博客即将搬运同步至腾讯云+社区,邀请你们一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=2j4ukgnjjum8o

相关文章
相关标签/搜索