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

来源:YOYOFx

cnblogs.com/maxzhang1985/p/9522017.html

一、前言

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,内容如下:

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

编写测试代码

class Program

{

static void Main(string[] args)

{

Logger logger = LogManager.GetCurrentClassLogger();

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

for(int i = 0; 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下, 欢迎一起交流。

看完本文有收获?请转发分享给更多人

关注「DotNet」,提升.Net技能

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180826B0J3IT00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券