[ Interceptor] publicclassHello{[ Log] publicvirtualvoidSayHello( stringcontent ) {varstr = $"Hello, {content}" ; Console.WriteLine(str);}}然后创建代理类型: staticvoidMain( string[] args ) {...[ Interceptor] publicclassHello{[ Log] publicvirtualvoidSayHello( stringcontent ) {varstr = $"Hello, {content}" ; Console.WriteLine(str);}}然后创建代理类型:
CZGL.AOP 可以通过 .NET Core 自带的依赖注入框架和 Autofac 结合使用 , 自动代理 CI 容器中的服务 。 这样不需要 AopInterceptor.CreateProxyOfClass 手动调用代理接口 。
CZGL.AOP 代码是开源的 , 可以参考笔者另一篇博文:
有些公司无技术管理规范 , 不同的开发人员使用不同的日志框架 , 一个产品中可能有 .txt、NLog、Serilog等 , 并且没有同一的封装 。
.NET Core 中的日志组件有很多 , 但是流行的日志框架基本都会实现 Microsoft.Extensions.Logging.Abstractions , 因此我们可以学习Microsoft.Extensions.Logging。 Microsoft.Extensions.Logging.Abstractions 是官方对日志组件的抽象 , 如果一个日志组件并不支持 Microsoft.Extensions.Logging.Abstractions 那么这个组件很容易跟项目糅合的 , 后续难以模块化以及降低耦合程度 。
Microsoft.Extensions.Logging 软件包中包含 Logging API, 这些 Logging API 不能独立运行 。 它与一个或多个日志记录提供程序一起使用 , 这些日志记录提供程序将日志存储或显示到特定输出 , 例如 Console, Debug, TraceListeners 。
下图是 .NET Core 中 Loggin API 的层次结构:
文章图片
图片来源:https://www.tutorialsteacher.com/
说实话 , Microsoft.Extensions.Logging 刚开始是学着很懵 , 配置感觉很复杂 。 因此 , 有一张清晰的结构图很重要 , 可以帮助大家理解里面的 Logging API 。
ILoggerFactory
:
.NET Core 中很多标准接口都实践了工厂模式的思想 , ILoggerFactory 正是工厂模式的接口 , 而 LoggerFactory 是工厂模式的实现 。
其定义如下:
ILoggerProvider
:
通过实现ILoggerProvider接口可以创建自己的日志记录提供程序 , 表示可以创建 ILogger 实例的类型 。
其定义如下:
:
ILogger 接口提供了将日志记录到基础存储的方法 , 其定义如下:
:
logging providers 称为日志记录程序 。
Logging Providers 将日志显示或存储到特定介质 , 例如 console, debugging event, event log, trace listener 等 。
Microsoft.Extensions.Logging 提供了以下类型的 logging providers , 我们可以通过 Nuget 获取 。
特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
