本文是“项目框架构建”系列之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