建设网站的技术方案,海拉尔做网站,服装营销型网站建设,做鞋子出口需要作网站吗前言回顾#xff1a;日志记录之日志核心要素揭秘在上一篇中#xff0c;我们通过学习了解在.net core 中内置的日志记录中的几大核心要素#xff0c;在日志工厂记录器(ILoggerFactory)中实现将日志记录提供器(ILoggerProvider)对象都可以集成到Logger对象组合中#xff0c;这… 前言回顾日志记录之日志核心要素揭秘在上一篇中我们通过学习了解在.net core 中内置的日志记录中的几大核心要素在日志工厂记录器(ILoggerFactory)中实现将日志记录提供器(ILoggerProvider)对象都可以集成到Logger对象组合中这样的话我们就可以通过基于ILoggerProvider自定义日志记录程序集成到Logger中再创建写日志定义Ilogger自定义日志记录器实现日志的输出方式这样实现自定义日志记录工具。在这个过程中日志记录器ILogger中的Log()方法会记录执行日志通过在ILoggerFactory产生的是ILogger类型也就是我们最终使用的Logger其Log()方法是依次调用Logger中包含的LoggerInformation[]数组中的ILogger。而ILoggerProvider产生的为各类不同的XxxLogger也就是上面说的Logger中的LoggerInformation数组包含的如ConsoleLogger、DebugLogger其Log()方法是把日志写到具体的目标上去所以我们自定义的日志程序也可以在日志记录器工厂中实现添加日志程序达到将日志写到具体目标的作用。所以下文我们通过自定义的方式实现ILogger、ILoggerProvider两个接口来实现我们自己想要的日志记录程序实现自定义输出目标方式。下文只是简单的根据接口自定义实现输出日志记录到控制台的demo开始自定义Logger创建一个自定义Logger目的是将指定的等级日志输出到控制台。所以我们创建一个ExtensionLogger的类指定输出的日志等级。所以在这之前我们需要配置一下输入日志的等级因此我们需要增加一个等级的配置类ExtensionsConfiguration。在ExtensionsConfiguration中public class ExtensionsConfiguration
{/// summary/// 日志等级/// /summarypublic LogLevel LogLevel { get; set; } LogLevel.Warning;
}再自定义日志记录类ExtensionLogger实现接口ILogger,public class ExtensionsLogger : ILogger
{private readonly ExtensionsConfiguration _config;public ExtensionsLogger(ExtensionsConfiguration extensionsConfiguration){_config extensionsConfiguration;}public IDisposable BeginScopeTState(TState state){return null;}public bool IsEnabled(LogLevel logLevel){return logLevel _config.LogLevel;}public void LogTState(LogLevel logLevel, EventId eventId, TState state,Exception exception, FuncTState, Exception, string formatter){if (!IsEnabled(logLevel)){return;}Console.WriteLine($ {logLevel} - {eventId.Id} : formatter(state, exception));}
}根据ILogger接口实现其中实现Log()接口方法将日志输出到指定目标这里是输出到控制台在设置了日志等级的情况条件下当满足条件后才能输出对应的日志。自定义LoggerProvider在创建了日志输出记录后我们同时需要提供一个日志程序来增加和创建上面的Logger记录所以我们通过自定义日志提供器类ExtensionsLoggerProvider,实现ILoggerProvider类。public class ExtensionsLoggerProvider : ILoggerProvider
{private readonly ExtensionsConfiguration _config;public ExtensionsLoggerProvider(ExtensionsConfiguration extensionsConfiguration){_config extensionsConfiguration;}public ILogger CreateLogger(string categoryName){return new ExtensionsLogger(_config);}public void Dispose(){}
}基于ILoggerProvider接口实现自定义类实现方法CreateLogger,来创建上面的日志记录。使用在Startup.cs中,通过Configure方法调用配置日志记录。 public void Configure(IApplicationBuilder app, IWebHostEnvironment env , ILoggerFactory loggerFactory){if (env.IsDevelopment()){app.UseDeveloperExceptionPage();}// 注入ILogggerFactory,然后配置参数//添加日志等级loggerFactory.AddProvider(new ExtensionsLoggerProvider(new ExtensionsConfiguration { LogLevel LogLevel.Warning }));app.UseRouting();app.UseAuthorization();app.UseEndpoints(endpoints {endpoints.MapControllers();});}在此之前我们可以清空默认的配置然后根据日志等级在控制台中输出对应的日志记录。效果在等级为Information情况下输出效果如下这个就是我们通过自定义的方式实现的按日志等级输出的记录。拓展写入本地文件第一步为LoggerFactory扩张一个方法提供增加日志写文件方式的入口。相关的配置来自appsettings.json第二步实现我们的logger提供程序实现ILoggerProvider接口关键方法CreateLogger创建真正写日志的logger。对当前的logger可以做适当的缓存配置logger第三步实现我们的logger实现ILogger接口。真正将log写入file。这里可以参考另一篇资料 .Net Core Logger 实现log写入本地文件系统总结 1. 上文中我们通过自定义的方式实现了根据日志等级将日志记录输出到指定目标的方式在这种基础上我们可以根据具体的需求做完善修改实现自己的日志记录输出方式。 2. 除了我们通过自定义的方式之外我们也可以借用第三方日志框架组件程序进行使用根据拓展方法进行调用在后续中我们会使用第三方日志记录程序来实现日志记录的输出。 3. 如果有不对的或不理解的地方希望大家可以多多指正提出问题一起讨论,不断学习,共同进步。 4.搜索关注公众号【DotNet技术谷】--回复【自定义】可获取本篇文章的源码。