项目框架构建之5:日志的构建

本文是“项目框架构建”系列之5,本文介绍日志的构建。

为了做出通用的公共日志模块,我们需要使用微软的Microsoft.Extensions.Logging日志管理模块,该模块提供了灵活且可扩展的日志记录机制,它为整个.net应用程序提供了一致统一的接口,而且不受具体日志库的限制。

通过使用这个库,你可以将你的应用程序与不同的日志库集成,而不必修改应用程序的核心代码,它可以集成你想要的任何常见库,如NLog、log4net等。


以下是 Microsoft.Extensions.Logging 的一些关键概念和组件:

ILogger: ILogger 是核心接口,用于在应用程序中进行日志记录。应用程序代码应该通过 ILogger 进行日志记录,而不是直接依赖于具体的日志库。

ILoggerFactory: ILoggerFactory 是用于创建 ILogger 实例的工厂。每个应用程序只需一个 ILoggerFactory 实例。在应用程序启动时,你可以配置 ILoggerFactory,并将其注入到需要日志记录的组件中。

LoggerProvider: LoggerProvider 是一个实现,它负责创建 ILogger 实例。在 ILoggerFactory 中可以注册一个或多个 LoggerProvider,每个都与一个特定的日志库(例如,Console、Debug、NLog、Serilog等)相关联。

Log Levels: Microsoft.Extensions.Logging 定义了不同的日志级别,包括 Trace、Debug、Information、Warning、Error 和 Critical。你可以根据应用程序的需求选择适当的日志级别。

日志信息(Log Information): 每个日志记录都包含一个消息和可选的参数。这些信息可以帮助你更好地理解日志的上下文。

Provider Registration: 在应用程序中,你需要注册一个或多个 LoggerProvider,以便日志信息能够被输出到特定的目标(例如控制台、文件、数据库等)。


好的,了解了Microsoft.Extensions.Logging日志库,我们先在Xejen.Logger项目中,做一些简单的工作。
Xejen.Logger项目的工作目的是为了实现日志抽象,它不应依赖于具体的实现库,具体库由用户来决定,这样用户就可以实现日志自由

为了集成NLog的实现,我们新开一个项目Xejen.Logger.NLog来实现日志管理

1.创建ILoggerManager.cs接口,用于管理日志。


2.创建ILoggerManager.cs接口的具体实现,他具体使用哪个日志工厂,将由TLoggerFactory日志工厂来决定。

3.提供一个开放日志管理接口的扩展


为了应对一些测试环境以及无依赖注入情况下又想使用日志的情况,我们加上一个日志扩展,以便让那些场景可以使用


4.使用NLog实现日志管理


构建一个NLogManager类,来实现LoggerManager类,这样就简单集成了NLog,用户想用NLog的时候,只要创建此对象的实例,就可以随心所欲的使用NLog了。
同理,其它的日志管理库,也可以依样进行。

日志模块是很简单的模块,他将NLog集成到了Microsoft.Extensions.Logging中,都是使用既有的Api,这都不是个什么事。

最后日志项目成型如下:

祝您用餐愉快。

1-3-5 $ 3-5-5-4 带着田螺回四堡 3-5-2-4

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/596522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript】Failed to execute ‘querySelector‘, is not valid selector

当使用 querySelector 时,出现这个错误,很可能的一个原因是:选择标识符以数字开头。 JS中使用 getElementById 时,标识符以数字开头没有问题。但是,querySelector 是 CSS3 选择器,以数字开头的标识符就会报…

02-微服务-Eureka注册中心

Eureka注册中心 假如我们的服务提供者user-service部署了多个实例,如图: 大家思考几个问题: order-service在发起远程调用的时候,该如何得知user-service实例的ip地址和端口?有多个user-service实例地址,…

Linux中MySQL的增删改查

MyISAM和InnoDB的区别 MyISAM和InnoDB的区别 Mysql在V5.1之前默认存储引擎是MyISAM;在此之后默认存储引擎是InnoDB MyISAM不支持事务,而InnoDB支持。InnoDB的AUTOCOMMIT默认是打开的,即每条SQL语句会默认被封装成一个事务,自动提…

每日一道算法题day-one(备战蓝桥杯)

从今天开始博主会每天做一道算法题备战蓝桥杯,并分享博主做题的思路,有兴趣就加入我把! 算法题目: 有一个长度为 N 的字符串 S ,其中的每个字符要么是 B,要么是 E。 我们规定 S 的价值等于其中包含的子…

什么是网络服务器?

WEB简介 WEB服务器也称为WWW(WORLD WIDE WEB)服务器,主要功能是提供网上信息浏览服务。 WWW 是 Internet 的多媒体信息查询工具,是 Internet 上近年才发展起来的服务,也是发展最快和目前用的最广泛的服务。正是因为有了WWW工具,才…

牛客网面试题知识点记录-03

1.题目讲解重写后子类调用父类的方法总结:当子类重写了父类方法A,父类方法直接调用被重写的父类方法后,调用的是子类的重写的父类方法A。 class Test {public static void main(String[] args) {System.out.println(new B().getValue());}st…

在线负公差测径仪 生产场景智能化

在线负公差测径仪是专为负公差轧制而研发的精密仪器,除检测的外径尺寸外,还能对负公差信息进行展示。让操作工对生产更加得心应手。 负公差测径仪同样采用八轴测头进行非接触式的在线检测,以实现全方位的尺寸检测,并将截面图实时展…

【WPF.NET开发】WPF中的焦点

本文内容 键盘焦点逻辑焦点键盘导航以编程方式导航焦点焦点事件 在 WPF 中,有两个与焦点有关的主要概念:键盘焦点和逻辑焦点。 键盘焦点指接收键盘输入的元素,而逻辑焦点指焦点范围中具有焦点的元素。 本概述详细介绍了这些概念。 对于创建…

申请域名SSL证书并自动推送至阿里云 CDN

近期国外SSL证书厂商调整了免费证书的续签规则,一年期的证书全部取消,现在只能申请90天有效期的免费证书。普通web站点可以通过宝塔面板或部署acme.sh等证书自动管理工具来实现自动化申请和部署,但是阿里云之类的CDN服务就只能通过手动或Open…

初步认识API安全

一、认识API 1. 什么是API API(应用程序接口):是一种软件中介,它允许两个不相关的应用程序相互通信。它就像一座桥梁,从一个程序接收请求或消息,然后将其传递给另一个程序,翻译消息并根据 API 的程序设计执行协议。A…

Hystrix相关面试题及答案(2024)

1、什么是Hystrix,它是如何工作的? Hystrix是一个由Netflix开源的库,主要用于在分布式系统中提供延迟和容错功能,通过阻止服务故障的蔓延和提供回退机制来保护系统。它在服务架构中扮演着重要的角色,特别是在微服务架…

利用阿里云的尖端数据库解决方案增强游戏数据管理

在快节奏和动态的游戏世界中,对于努力为玩家提供无缝体验的公司来说,管理大量数据是一项关键挑战。阿里云是亚太地区的主要参与者,也是全球公认的运营数据库管理系统领导者,提供量身定制的创新解决方案,以应对游戏公司…

C# 全屏label控件实现的贪吃蛇。

C# 全屏label控件实现的贪吃蛇。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using stat…

T527 配置edp配置pwm不正常引起的背光不亮问题

前言 T527 主板在调试edp点屏的时候,配置了一个pwm8对应的引脚作为背光,这个pwm8默认在dts中是没有配置的,需要添加对应的pin脚配置,于是参考了其他pwm的配置,添加到了dts。但是开机后edp屏的背光就是不亮&#xff0c…

案例074:基于微信小程序的儿童预防接种预约管理系统

文末获取源码 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder …

信息学奥赛一本通2035:【例5.2】平移数据

2035:【例5.2】平移数据 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 55733 通过数: 36735 【题目描述】 将aa数组中第一个元素移到数组末尾,其余数据依次往前平移一个位置。 【输入】 第一行为数组aa的元素个数; 第二行为nn个小于10001…

vue中provide和inject使用的注意事项

在Vue.js中,provide 和 inject 是用于父组件向子组件传递数据的高级选项。它们通常用于跨层级组件之间的通信,而不需要通过中间组件进行 props 或事件的传递。 provide 选项: provide 选项用于在父组件中声明需要传递给后代组件的数据。 /…

uniCloud 的 schema2code 【实用教程】

schema2code 用于通过 schema 文件,自动生成对表进行增删改查的操作页面。 以 uniCloud-aliyun/database/todo.schema.json 为例 {"bsonType": "object","required": [],"permission": {"read": true,"cr…

Halcon区域的面积和中心点area_center

Halcon区域的面积和中心点 提到区域的特征,最常用的莫过于区域的面积和中心点坐标信息。实际工作中,经常会使用面积或中心点进行特征的选择和定位。Halcon中的area_center算子就是用于实现这一功能的,该算子一次返回以下两个结果。 &#xf…

Vue3-33-路由-路由的别名配置 alias

别名的作用 路由中的别名配置,可以实现 多个路径 对应 同一个路由。 例如 : 路由的路径是 /a; 配置别名为 : /a2; 则 访问 /a 或 /a2 的时候,都可以访问到 同一个组件。 别名的特点 关键字 : alias 当通过别名进行路由…