一、前言

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下, 欢迎一起交流。

.NET Core 开源学习群:214741894

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

微服务日志之.NET Core使用NLog通过Kafka实现日志收集的更多相关文章

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

    微服务日志之.NET Core使用NLog通过Kafka实现日志收集 https://www.cnblogs.com/maxzhang1985/p/9522017.html 一.前言 NET Core ...

  2. 【开源】.net微服务开发引擎Anno 让复杂的事简单点- 日志、链路追踪一目了然 (上)

    1.Anno简介? Anno是一个微服务框架引擎.入门简单.安全.稳定.高可用.全平台可视化监控.依赖第三方框架少.详情请查看<[开源].net微服务开发引擎Anno开源啦> 本章主题:. ...

  3. 微服务定义及.Net Core中用的技术

    微服务 定义: 它是一种架构模式,提倡将大的单体系统,按业务拆分成一个个较小且独立的服务,服务与服务之前进行相互协作和配合. 历史: 针对互联网行业的蓬勃发展,需要支撑的业务越来越多,越来越大,单体程 ...

  4. 微服务系列实践 .NET CORE

    从事这个行业转眼已经6年了,从当初刚毕业的在北京朝八晚十,从二环到五环,仍每天精力充沛的小愤青:再到深圳一点一滴的辛勤在软件行业的耕种,从当初单体应用架构到现在微服务架构的经历,回想起来自己的收获倒是 ...

  5. asp.net core结合NLog搭建ELK实时日志分析平台

    0.整体架构 整体架构目录:ASP.NET Core分布式项目实战-目录 一.介绍ELK 1.说明(此篇ELK采用rpm的方式安装在服务器上)-牛刀小试 承接上一篇文章的内容准备部署ELK来展示asp ...

  6. .NET Core微服务之ASP.NET Core on Docker

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Docker极简介绍 1.1 总体介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.D ...

  7. 【微服务目录】.NET Core 微服务介绍

    介绍: 写这篇文章有多方面的原因,第一当然是为了以后自己可以随时翻阅,第二也算是一种积累吧.因为有些东西你弄个之后,过了很长时间不用,可能会有些忘却,但是你因为以前弄个吧,有不是那种小白,需要去找示例 ...

  8. 浅谈微服务架构与.Net Core

    微服务(microservice)这个概念是2012年出现的,2014年3月Martin Fowler在他的个人网站(https://martinfowler.com/articles/microse ...

  9. SpringBoot 整合 Elastic Stack 最新版本(7.14.1)分布式日志解决方案,开源微服务全栈项目【有来商城】的日志落地实践

    一. 前言 日志对于一个程序的重要程度不用过多的言语修饰,本篇将以实战的方式讲述开源微服务全栈项目 有来商城 是如何整合当下主流日志解决方案 ELK +Filebeat . 话不多说,先看实现的效果图 ...

随机推荐

  1. Vue proxy

    npm run dev 我们访问的是localhost:8080 config文件夹下的index.js配置文件的dev dev: { env: require('./dev.env'), port: ...

  2. [C语言]进阶|图形库

    ---------------------------------------------------------------------- // main.c // Created by weich ...

  3. Docker 清理命令

    原文地址http://www.runoob.com/w3cnote/docker-clear-command.html,这里仅作为记录,便于以后查阅 查看正在运行的容器(Container) dock ...

  4. Java学习08 (第一遍) - SpringMVC

    写一下午的好多居然丢失...自动保存也只是保存丢失后的 那就不多写了,简单写: Spring:(自己画的) 官网的: 写一个Spring的例子: Eclipse http://repo.spring. ...

  5. svg矢量图

    svg简介 Scalable Vector Graphics 可缩放矢量图形 SVG 图像在放大或改变尺寸的情况下其图形质量不会有所损失 svg知识点 svg如何绘图 svg和cnavas区别 svg ...

  6. cdnbest独立主控用户如何开通日志分析

    1.cdn独立主控用户开通日志分析,先用授权的帐号在官网平台登陆,然后购买日志套餐 2.在自已的主控平台还要做两步操作: 1.增加个日志套餐,内容随便,因为设置是无效的,只是需要一个套餐 2. 给用户 ...

  7. Unity 2018 By Example 2nd Edition

    Unity is the most exciting and popular engine used for developing games. With its 2018 release, Unit ...

  8. 你确定你真的懂Nginx与PHP的交互?

    Nginx是俄国人最早开发的Webserver,现在已经风靡全球,相信大家并不陌生.PHP也通过二十多年的发展来到了7系列版本,更加关注性能.这对搭档在最近这些年,叱咤风云,基本上LNMP成了当下的标 ...

  9. 微信小程序记账本进度六

    //app.jsApp({ onLaunch: function () { //调用API从本地缓存中获取数据 var logs = wx.getStorageSync('logs') || [] l ...

  10. python shell的交互模式和文本编辑模式

    之前学python的时候,是拿<笨办法学python>练习的. 书里面基本都是以.py文件去写代码,也就是文本编辑模式. 而交互模式(也就是powershell),唯有在input用户输入 ...