一, 前言
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
来源: http://www.bubuko.com/infodetail-3217692.html