.NetCore中的日志(2)集成第三方日志工具
.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)集成第三方日志工具的更多相关文章
- Log4j2日志框架集成Slf4j日志门面
1.说明 本文介绍使用日志门面Slf4j打印日志, 底层日志实现使用Log4j2框架, 方便以后切换底层日志实现, Log4j2可以替换成Logback等. 2.依赖管理 在pom.xml依赖管理中导 ...
- .NetCore中的日志(1)日志组件解析
.NetCore中的日志(1)日志组件解析 0x00 问题的产生 日志记录功能在开发中很常用,可以记录程序运行的细节,也可以记录用户的行为.在之前开发时我一般都是用自己写的小工具来记录日志,输出目标包 ...
- 如何在通用权限管理系统中集成log4net日志功能
开发人员都知道,在系统运行中要记录各种日志,自己写一个日志功能,无论是在效率还是功能扩展上来说都不是很好,目前大多用的是第三方的日志系统,其中一个非常有名,用的最多的就是log4net.下面是关于这个 ...
- asp.net core 集成 log4net 日志框架
asp.net core 集成 log4net 日志框架 Intro 在 asp.net core 中有些日志我们可能想输出到数据库或文件或elasticsearch等,如果不自己去实现一个 Logg ...
- .Java中的异常、断言、日志【草稿下,Log4j专题】
(本章主要讲解Java里面比较核心的一块内容--异常处理,Java异常处理机制,一致都是比较复杂的一块,而很多时候如果写程序的时候能够适当地注意对应的一些异常处理情况,那么就会在开发过程节省一大部分时 ...
- 跟我一起学.NetCore之日志作用域及第三方日志框架扩展
前言 上一节对日志的部分核心类型进行简单的剖析,相信现在再使用日志的时候,应该大概知道怎么一回事了,比如记录器是怎么来的,是如何将日志内容写入到不同目的地的等:当然还有很多细节没深入讲解,抽时间小伙伴 ...
- Go之Zap日志库集成Gin
简介 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 1 . 能够将事件记录到文件中,而不是应用程序控制台; 2 . 日志切割-能够根据文件大小.时间或间隔等来切割日志文件; ...
- 使用.NET 6开发TodoList应用(3)——引入第三方日志库
需求 在我们项目开发的过程中,使用.NET 6自带的日志系统有时是不能满足实际需求的,比如有的时候我们需要将日志输出到第三方平台上,最典型的应用就是在各种云平台上,为了集中管理日志和查询日志,通常会选 ...
- Spring Boot(十)Logback和Log4j2集成与日志发展史
一.简介 Java知名的日志有很多,比如:JUL.Log4j.JCL.SLF4J.Logback.Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看. 1.1 ...
随机推荐
- 【小程序分享篇 二 】web在线踢人小程序,维持用户只能在一个台电脑持登录状态
最近离职了, 突然记起来还一个小功能没做, 想想也挺简单,留下代码和思路给同事做个参考. 换工作心里挺忐忑, 对未来也充满了憧憬与担忧.(虽然已是老人, 换了N次工作了,但每次心里都和忐忑). 写写代 ...
- 解决PHP-问题:Class 'SimpleXMLElement' not found in
1.问题 在ubuntu 16.10中,学习PHP,学习到PHP如何生成XML文件时候,碰到了这个问题: PHP Fatal error: Class 'ClassName\SimpleXMLElem ...
- Android raw to bmp
Android raw 格式转 bmp 图像 raw 保存的为裸数据,转换时都需要把它转成RGBA 的方式来显示.其中: 8位RAW: 四位RGBA 来表示一位灰度; 24位RAW: 三位RGB相同, ...
- 【初学python】使用python调用monkey测试
目前公司主要开发安卓平台的APP,平时测试经常需要使用monkey测试,所以尝试了下用python调用monkey,代码如下: import os apk = {'j': 'com.***.test1 ...
- JavaScript动画-碰撞检测
▓▓▓▓▓▓ 大致介绍 碰撞检测是指在页面中有多个元素时,拖拽一个元素会出现碰撞问题,碰撞检测是以模拟拖拽和磁性吸附中的范围限定为基础的 效果:碰撞检测 ▓▓▓▓▓▓ 碰撞检测 先来看看碰撞检测的原理 ...
- Oracle碎碎念~1
1. 设置SQL*Plus提示符 SQL> set sqlprompt "_user'@'_connect_identifier>" SYS@orcl> 为了对所 ...
- 【NLP】十分钟快览自然语言处理学习总结
十分钟学习自然语言处理概述 作者:白宁超 2016年9月23日00:24:12 摘要:近来自然语言处理行业发展朝气蓬勃,市场应用广泛.笔者学习以来写了不少文章,文章深度层次不一,今天因为某种需要,将文 ...
- JavaScript中事件处理
先看看下面一道题目,请评价以下代码并给出改进意见: if (window.addEventListener) {//标准浏览器 var addListener = function(el, type, ...
- 如何优化coding
如何优化coding 前言 最近一直在做修改bug工作,修改bug花费时间最多的不是如何解决问题而是怎样快速读懂代码.如果代码写的好的,不用debug就可以一眼看出来哪里出了问题.实际上,我都要deb ...
- 总结30个CSS3选择器
或许大家平时总是在用的选择器都是:#id .class 以及标签选择器.可是这些还远远不够,为了在开发中更加得心应手,本文总结了30个CSS3选择器,希望对大家有所帮助. 1 *:通用选择器 ;; ...