.NetCore中的日志(2)集成第三方日志工具

0x00 在.NetCore的Logging组件中集成NLog

上一篇讨论了.NetCore中日志框架的结构,这一篇讨论一下.NetCore的Logging组件中第三方日志工具的集成。只要按照Logging组件中相关接口的要求提供相应的实现(ILogger、ILoggerProvider),然后把实现的ILoggerProvider加入到LoggerFactory就可以使用了,非常方便。这里以NLog为例进行实践。关于NLog的详细教程可以参考https://github.com/NLog/NLog/wiki,园子里也很多这方面的文章。这里主要说集成原理。

NLog本身提供了一套完整的日志记录框架,由NLog.Logger实现日志记录,通过配置文件或代码配置路由规则(rules)把不同name的Logger路由到不同的输出目标(target)上。

NLog集成到Logging组件中,一般不会做过多的配置,只是把Log方法的内容转发到NLog中处理。日志过滤(NLog中叫路由)和输出格式配置都在NLog中配置,Logging组件仅仅起到一个日志内容转发的作用。

NLog的Logger在集成到.NetCore的Logging组件中时需要做以下事情:

1、包装NLog.Logger为NLogLogger,并实现ILogger接口。

把NLog.Logger包装为NlogLogger,实现ILogger接口。在实现Log方法时把Logging组件中Log方法的参数转化为NLog.Logger中Log方法的参数,然后调用NLog.Logger的Log方法输出日志。

此外,在NLog中是有自己的日志等级的,因此在记录日志时需要把.NetCore的Logging组件中定义的日志等级转换为NLog中的日志等级。

2、实现ILoggerProvider接口

3、添加扩展方法方便把ILoggerProvider加入到LoggerFactory中。

有一点需要注意,NLog官方给出的示例(https://github.com/NLog/NLog.Extensions.Logging)还是像以往一样在类中调用

LogManager.GetCurrentClassLogger();

方法获取Logger,这是不科学的,实际使用中还是应该通过依赖注入的方式获取Logger。通过在构造函数参数中注入ILogger<Class>()的方式获取Logger,与在Class中调用GetCurrentClassLogger()方法获取的Logger的Name是相同的,都可以正常在NLog配置文件中匹配路由规则。

0x01 集成自己的日志工具

了解了.NetCore中Logging框架,我们也可以尝试自己写一个日志记录器并集成到Logging组件中。下面我们自己写一个往文本文档中记录日志的工具,以下内容只是用于演示,实际编写自己的日志记录工具需要更加严谨。

首先需要实现ILogger接口,Log方法直接把传入的信息按格式输出到文本文件:

实现ILoggerProvider接口:

写一个扩展方法方便添加:

这样在Startup中我们就可以加入需要的所有Logger了,混合了原生的、第三方的、以及自己写的。

有兴趣看详细代码的可以到:

https://github.com/durow/NetCoreStudy/tree/master/src/LoggingStudy

0x02 写在最后

关于.NetCore的Logging组件就写到这里了,Logging组件的设计很容易集成第三方日志工具。了解Logging组件如何实现对各个不同日志工具的集成对于实际开发中日志记录基本是没有帮助的:(,毕竟有如此丰富的选择,我们几乎不需要开发自己的日志记录工具。不过通过对Logging组件的学习,在软件的设计方面学到了很多。也体会到了书本上很多看似没事找事的设计模式在实际中的应用。


更多内容欢迎访问我的博客:http://www.durow.vip

.NetCore中的日志(2)集成第三方日志工具的更多相关文章

  1. Log4j2日志框架集成Slf4j日志门面

    1.说明 本文介绍使用日志门面Slf4j打印日志, 底层日志实现使用Log4j2框架, 方便以后切换底层日志实现, Log4j2可以替换成Logback等. 2.依赖管理 在pom.xml依赖管理中导 ...

  2. .NetCore中的日志(1)日志组件解析

    .NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...

  3. 如何在通用权限管理系统中集成log4net日志功能

    开发人员都知道,在系统运行中要记录各种日志,自己写一个日志功能,无论是在效率还是功能扩展上来说都不是很好,目前大多用的是第三方的日志系统,其中一个非常有名,用的最多的就是log4net.下面是关于这个 ...

  4. asp.net core 集成 log4net 日志框架

    asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...

  5. .Java中的异常、断言、日志【草稿下,Log4j专题】

    (本章主要讲解Java里面比较核心的一块内容--异常处理,Java异常处理机制,一致都是比较复杂的一块,而很多时候如果写程序的时候能够适当地注意对应的一些异常处理情况,那么就会在开发过程节省一大部分时 ...

  6. 跟我一起学.NetCore之日志作用域及第三方日志框架扩展

    前言 上一节对日志的部分核心类型进行简单的剖析,相信现在再使用日志的时候,应该大概知道怎么一回事了,比如记录器是怎么来的,是如何将日志内容写入到不同目的地的等:当然还有很多细节没深入讲解,抽时间小伙伴 ...

  7. Go之Zap日志库集成Gin

    简介 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1 . 能够将事件记录到文件中,而不是应用程序控制台; 2 . 日志切割-能够根据文件大小.时间或间隔等来切割日志文件; ...

  8. 使用.NET 6开发TodoList应用(3)——引入第三方日志库

    需求 在我们项目开发的过程中,使用.NET 6自带的日志系统有时是不能满足实际需求的,比如有的时候我们需要将日志输出到第三方平台上,最典型的应用就是在各种云平台上,为了集中管理日志和查询日志,通常会选 ...

  9. Spring Boot(十)Logback和Log4j2集成与日志发展史

    一.简介 Java知名的日志有很多,比如:JUL.Log4j.JCL.SLF4J.Logback.Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看. 1.1 ...

随机推荐

  1. 梅须逊雪三分白,雪却输梅一段香——CSS动画与JavaScript动画

    CSS动画并不是绝对比JavaScript动画性能更优越,开源动画库Velocity.js等就展现了强劲的性能. 一.两者的主要区别 先开门见山的说说两者之间的区别. 1)CSS动画: 基于CSS的动 ...

  2. web全栈开发之网站开发二(弹出式登录注册框前端实现-类腾讯)

    这次给大家分享的是目前很多网站中流行的弹出式登录框,如下面的腾讯网登录界面,采用弹出式登录的好处是大大提升了网站的用户体验和交互性,用户不用重新跳转到指定的页面就能登录,非常方便 先来个演示地址 要实 ...

  3. iOS可视化动态绘制八种排序过程

    前面几篇博客都是关于排序的,在之前陆陆续续发布的博客中,我们先后介绍了冒泡排序.选择排序.插入排序.希尔排序.堆排序.归并排序以及快速排序.俗话说的好,做事儿要善始善终,本篇博客就算是对之前那几篇博客 ...

  4. hash表长度优化证明

    hash表冲突的解决方法一般有两个方向: 一个是倾向于空间换时间,使用向量加链表可以最大程度的在节省空间的前提下解决冲突. 另外一个倾向于时间换空间,下面是关于这种思路的一种合适表长度的证明过程: 这 ...

  5. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  6. DDD 领域驱动设计-商品建模之路

    最近在做电商业务中,有关商品业务改版的一些东西,后端的架构设计采用现在很流行的微服务,有关微服务的简单概念: 微服务是一种架构风格,一个大型复杂软件应用由一个或多个微服务组成.系统中的各个微服务可被独 ...

  7. jQuery.Ajax IE8 无效(CORS)

    今天在开发的时候,遇到一个问题,$.get()在 IE8 浏览器不起作用,但 Chrome,Firefox 却是可以的,网上资料很多,最后发现是 IE8 默认不支持 CORS 请求,需要手动开启下: ...

  8. 使用SwingBench 对Oracle RAC DB性能 压力测试

    我们可以使用swingbench这个工具对数据库性能进行压力测试,得到一些性能指标作为参考. SwingBench下载: http://www.dominicgiles.com/downloads.h ...

  9. node.js学习(二)--Node.js控制台(REPL)&&Node.js的基础和语法

    1.1.2 Node.js控制台(REPL) Node.js也有自己的虚拟的运行环境:REPL. 我们可以使用它来执行任何的Node.js或者javascript代码.还可以引入模块和使用文件系统. ...

  10. CSS常见技巧

    一.CSS Sprite(雪碧图|精灵图)指什么? 有什么作用? CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图像和背景图片合并到一张图片上,然后利 ...