当前位置: 首页 > news >正文

网站域名备案与解析惠城网站制作

网站域名备案与解析,惠城网站制作,喜欢做网站的行业,郑州一建南阳分公司ASP.NET Core - 日志记录系统#xff08;二#xff09; 2.4 日志提供程序2.4.1 内置日志提供程序2.4.2 源码解析 本篇接着上一篇 ASP.NET Core - 日志记录系统(一) 往下讲#xff0c;所以目录不是从 1 开始的。 2.4 日志提供程序 2.4.1 内置日志提供程序 ASP.NET Core 包括… ASP.NET Core - 日志记录系统二 2.4 日志提供程序2.4.1 内置日志提供程序2.4.2 源码解析 本篇接着上一篇 ASP.NET Core - 日志记录系统(一) 往下讲所以目录不是从 1 开始的。 2.4 日志提供程序 2.4.1 内置日志提供程序 ASP.NET Core 包括以下日志记录提供程序作为共享框架的一部分 ConsoleDebugEventSourceEventLog 除此之外还有一些微软官方提供的但是没有和 .NET Core 框架集成的提供程序如 ApplicationInsights 、AzureAppServicesFile 和 AzureAppServicesBlob 这些在日常开发中使用的比较少大家有兴趣的话可以自行了解一下。 控制台 Console 提供程序将输出记录到控制台。 通用主机启动时就包含了控制台日志提供程序使用它之后我们记录的日志在调试过程中可以在 VS 的 “调试输出” 窗口和 “ASP.NET Core Web 服务器” 窗口(非 IIS Press 启动) 看到。使用 dotnet run 运行应用时可以在控制台窗口中看到。以 “Microsoft” 类别开头的日志来自 ASP.NET Core 框架代码。 ASP.NET Core 和应用程序代码使用相同的日志记录 API 和提供程序。 控制台提供程序提供了多个 API允许根据需要对输出格式、文字颜色等进行调整。 调试 Debug 提供程序使用 System.Diagnostics.Debug 类写入日志输出。 对 System.Diagnostics.Debug.WriteLine 的调用写入到 Debug 提供程序。 在 Linux 上Debug 提供程序日志位置取决于分发并且可以是以下位置之一 /var/log/message/var/log/syslog 事件来源 EventSource 提供程序写入名称为 Microsoft-Extensions-Logging 的跨平台事件源。 在 Windows 上提供程序使用的是 ETW。 EventSource 日志提供程序记录的日志可以使用跨平台的 dotnet 追踪工具 dotnet-trace 来收集和跟踪。dotnet-trace 的安装和使用请参阅 dotnet-trace 诊断工具 - .NET CLI | Microsoft Learn 。 事件日志 仅在 Windows 系统下生效可通过“事件查看器”进行日志查看。 EventLog 提供程序将日志输出发送到 Windows 事件日志。 与其他提供程序不同EventLog 提供程序不继承默认的非提供程序设置。 如果未指定 EventLog 日志设置则它们默认为 LogLevel.Warning。若要记录低于 LogLevel.Warning 的事件请显式设置日志级别。 默认情况下记录下来的事件日志一些基本参数如下 LogName“Application”SourceName“.NET Runtime”MachineName使用本地计算机名称。 我们可以通过 AddEventLog 重载可以传入 EventLogSettings 来修改 var builder WebApplication.CreateBuilder(); builder.Logging.AddEventLog(eventLogSettings {eventLogSettings.SourceName MyLogs; });上面已经讲到在通过通用主机启动一个 .NET Core 应用时会默认添加了 Console、Debug、EventSource 日志提供程序如果运行平台是 Windows还会添加 EventLog 日志提供程序。通过 ILoggingBuilder 我们可以重置并自定义日志提供程序的类型这使得我们可以根据需要使用任何符合标准的日志提供程序。 如果是没有使用通用主机的非托管控制台应用可以通过以下方式添加控制台日志提供程序 using var loggerFactory LoggerFactory.Create(builder {builder.AddConsole(); }); ILogger logger loggerFactory.CreateLoggerProgram(); logger.LogInformation(Example log message);不止控制台日志提供程序其他各种日志提供程序都是按照日志记录系统框架进行开发和集成。显然仅这些内置日志提供程序并不能满足我们生产开发中的使用例如缺少最基础且常用的文件日志提供程序还有在分布式应用已经非常普遍的业界现状下时常需要将日志写分布式日志系统中进行统一的管理和分析这些是微软没有提供的但是第三方都有成熟的按照 .NET Core 日志记录系统体系架构开发的实现这些将在下面细讲。 2.4.2 源码解析 .NET Core 日志记录系统的使用非常简单方便其扩展性非常强上面的章节已经讲解了基本的配置和使用最核心的实现在于 LogeerFactory 和 ILogger, LogeerFactory 用于日志系统的配置ILogger 用于日志记录。下面从框架源码的角度解析一下日志记录系统的实现。 阅读一个框架源码我们可以从其开放出来的 API 作为入口这样能较容易地梳理出其设计思路和实现脉络。首先是日志配置这一块我们在应用集成的时候对日志系统的配置都是基于 ILoggingBuilder 的当然通过上面章节的内容大家都已经知道在我们通过 ILoggingBuilder 进行配置之前通用主机已经进行了一些配置。 ILoggingBuilder 的实现类其实就只是保存了容器其他各种可用的方法都是扩展方法都是往容器之中添加配置。 在添加日志系统默认配置的时候可以看到显示调用了 AddLogging() 方法之后就是像我们自己在实际应用中对日志系统进行配置一样帮我们添加了一些默认配置。 AddLogging() 方法是扩展方法在 LoggingServiceCollectionExtensions 类中在这个方法中往容器注入了三个日志记录系统最关键的东西分别是 LoggerFactory、Logger 和日志配置。 当我们从使用日志记录器的时候要么就是从容器中解析要么就是通过 LoggerFactory.CreateLogger() 方法创建查看 Logger 类的实现其内部其实也是通过 LoggerFactory 创建了 ILogger 实例注意这里的 ILogger 是没有泛型的最终我们使用的其实都是这一个没有泛型的。 LoggerFactory 在其初始化的时候会从容器中解析出我们添加的日志记录提供程序以及和日记记录系统相关的配置信息并将日志记录提供程序保存到集合中。 当调用 CreateLogger 方法时会创建 Logger 实例为其配置并应用过滤规则并将其保存起来。 这里就引出了三个重要的内部实现 Logger 、LoggerInformation 和 MessageLogger。Logger 是上面讲到的我们最终实际使用的 ILogger 的实现类它的构造函数中需要传入 LoggerInformation 数组LoggerInformation 数组与日志提供程序的数量对应。LoggerInformation 是一个结构体是针对特定日志记录提供程序和日志类别的封装在内部创建了特定于具体日志提供程序的日志记录器。 MessageLogger 是最终的日志信息书写的地方它也是一个结构体包含了规则过滤等内容可以看到它的构造函数中传入了 LoggerInformation 的 Logger 属性也就是说最终也是使用特定于日志提供程序的日志记录器的。 最终返回的 MessageLogger 数组赋值给了 LoggerMessageLogger 数组不一定与日志记录提供程序的数量一样因为有些日志记录提供程序在规则配置检查中可能跳过了。 Logger 类应用了装饰器模式对多种日志记录提供程序的记录器进行了包装提供了统一的日志记录 API使得我们在使用时可以通过统一的入口将日志同时书写到不同的地方。当我们调用 Logger 实例的 Log 方法时实际上是遍历了 MessageLogger 数组通过具体的日志提供程序对应的日志记录器对当前日志级别进行检查并进行最终的日志记录。 以控制台提供程序为例这里中间有很多代码其实只是为了实现更好的扩展性和性能可以先忽略不看最终也只是返回了特定 ConsoleLogger。 而 ConsoleLogger 中的 Log 方法最终是将日志信息放到队列中再由队列处理器写到控制台中。 了解完 .NET Core 日志记录系统的整体实现逻辑之后我们想实现一个自己的日志提供程序其实还是比较简单的当然如果要像微软内置的日志记录提供程序或者第三方成熟的日志框架那样各种细节处理得很好就稍微有些难度了。以下是一个简单的示例模仿默认日志记录提供程序的的实现方式将日志记录到文件中 (1) 创建一个类库项目并引入以下依赖包 Install-Package Microsoft.Extensions.Logging.Abstractions Install-Package Microsoft.Extensions.Logging(2) 首先是实现 ILogger 接口提供我们的日志记录器 internal sealed class WeWantFileLogger : ILogger {private readonly object _sync new object();/// summary/// 创建日志记录域/// /summary/// typeparam nameTState/typeparam/// param namestate/param/// returns/returns/// exception crefNotImplementedException/exceptionpublic IDisposable? BeginScopeTState(TState state) where TState : notnull{// 由于不准备支持日志记录域功能这里返回一个空实现return NullScope.Instance;}/// summary/// 判断是否记录日志/// /summary/// param namelogLevel/param/// returns/returnspublic bool IsEnabled(LogLevel logLevel){return logLevel ! LogLevel.None;}/// summary/// 记录日志这里简单的演示例子/// 一个可用于正式环境的文件记录器还需考虑很多可扩展性、性能等因素/// /summary/// typeparam nameTState/typeparam/// param namelogLevel/param/// param nameeventId/param/// param namestate/param/// param nameexception/param/// param nameformatter/parampublic void LogTState(LogLevel logLevel, EventId eventId, TState state, Exception? exception, FuncTState, Exception?, string formatter){if (!IsEnabled(logLevel)){return;}ThrowHelper.ThrowIfNull(formatter);string message formatter(state, exception);if(string.IsNullOrEmpty(message)){return;}message ${logLevel}: {message} { Environment.NewLine };if(exception ! null){message Environment.NewLine Environment.NewLine exception;}var filePath Path.Combine(Directory.GetCurrentDirectory(), log.txt);lock (_sync){System.IO.File.AppendAllText(filePath, message);}} }其他相关的类如下 internal sealed class NullScope : IDisposable {public static NullScope Instance new NullScope();private NullScope() { }public void Dispose(){} }internal static partial class ThrowHelper {/// summaryThrows an see crefArgumentNullException/ if paramref nameargument/ is null./summary/// param nameargumentThe reference type argument to validate as non-null./param/// param nameparamNameThe name of the parameter with which paramref nameargument/ corresponds./paraminternal static void ThrowIfNull( #if NETCOREAPP3_0_OR_GREATER[NotNull] #endifobject? argument,[CallerArgumentExpression(argument)] string? paramName null){if (argument is null){Throw(paramName);}}#if NETCOREAPP3_0_OR_GREATER[DoesNotReturn] #endifprivate static void Throw(string? paramName) throw new ArgumentNullException(paramName); }[AttributeUsage(AttributeTargets.Parameter, AllowMultiple false, Inherited false)] internal sealed class CallerArgumentExpressionAttribute : Attribute {public CallerArgumentExpressionAttribute(string parameterName){ParameterName parameterName;}public string ParameterName { get; } }(3) 然后是实现 ILoggerProvider 接口提供日志记录提供程序 [ProviderAlias(WeWantFile)] public class WeWantFileLoggerProvider : ILoggerProvider {public ILogger CreateLogger(string categoryName){return new WeWantFileLogger();}public void Dispose(){} }(4) 提供相应的扩展方法 public static class WeWantFileLoggerFactoryExtensions {public static ILoggingBuilder AddWeWantFile(this ILoggingBuilder builder){builder.Services.TryAddEnumerable(ServiceDescriptor.SingletonILoggerProvider, WeWantFileLoggerProvider());return builder;} }(5) 在之前的项目中引用并进行以下配置 // 清除默认的日志记录提供程序添加自定义的日志记录提供程序 builder.Logging.ClearProviders(); builder.Logging.AddWeWantFile();(6) 测试日志记录 调用之前测试用的 Web API 接口代码如下 // 各种日志API对应各种日志级别 // 断点 _logger.LogTrace(这是一个断点日志); //调试 _logger.LogDebug(this is a debug.); //信息 _logger.LogInformation(this is an info.); //警告 _logger.LogWarning(this is a warning.); //错误 _logger.LogError(this is an error.); //当机 _logger.LogCritical(this is Critical);可以看到项目文件夹中多了 log.txt文件内容如下 .NET Core 下的日志记录系统大概就介绍到这里后面再继续介绍一下一些第三方日志框架怎么将其集成到 .NET Core 框架中进行正式生产环境下的应用。 参考文章 .NET Core 和 ASP.NET Core 中的日志记录 | Microsoft Learn 理解ASP.NET Core - 日志(Logging) - xiaoxiaotank - 博客园 (cnblogs.com)
文章转载自:
http://www.morning.aowuu.com.gov.cn.aowuu.com
http://www.morning.bflws.cn.gov.cn.bflws.cn
http://www.morning.rynrn.cn.gov.cn.rynrn.cn
http://www.morning.wmnpm.cn.gov.cn.wmnpm.cn
http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn
http://www.morning.xjtnp.cn.gov.cn.xjtnp.cn
http://www.morning.nqmwk.cn.gov.cn.nqmwk.cn
http://www.morning.dndk.cn.gov.cn.dndk.cn
http://www.morning.hjjfp.cn.gov.cn.hjjfp.cn
http://www.morning.qxmys.cn.gov.cn.qxmys.cn
http://www.morning.nykzl.cn.gov.cn.nykzl.cn
http://www.morning.krdb.cn.gov.cn.krdb.cn
http://www.morning.ppllj.cn.gov.cn.ppllj.cn
http://www.morning.qxlyf.cn.gov.cn.qxlyf.cn
http://www.morning.khlxd.cn.gov.cn.khlxd.cn
http://www.morning.qjzgj.cn.gov.cn.qjzgj.cn
http://www.morning.kfbth.cn.gov.cn.kfbth.cn
http://www.morning.dmtld.cn.gov.cn.dmtld.cn
http://www.morning.kdnrc.cn.gov.cn.kdnrc.cn
http://www.morning.rycd.cn.gov.cn.rycd.cn
http://www.morning.qsmmq.cn.gov.cn.qsmmq.cn
http://www.morning.bnkcl.cn.gov.cn.bnkcl.cn
http://www.morning.elsemon.com.gov.cn.elsemon.com
http://www.morning.mdmqg.cn.gov.cn.mdmqg.cn
http://www.morning.rythy.cn.gov.cn.rythy.cn
http://www.morning.lhsdf.cn.gov.cn.lhsdf.cn
http://www.morning.nqrlz.cn.gov.cn.nqrlz.cn
http://www.morning.rhkmn.cn.gov.cn.rhkmn.cn
http://www.morning.nckjk.cn.gov.cn.nckjk.cn
http://www.morning.ftznb.cn.gov.cn.ftznb.cn
http://www.morning.zdydj.cn.gov.cn.zdydj.cn
http://www.morning.wnwjf.cn.gov.cn.wnwjf.cn
http://www.morning.qphdp.cn.gov.cn.qphdp.cn
http://www.morning.weiwt.com.gov.cn.weiwt.com
http://www.morning.kpwcx.cn.gov.cn.kpwcx.cn
http://www.morning.mswkd.cn.gov.cn.mswkd.cn
http://www.morning.knngw.cn.gov.cn.knngw.cn
http://www.morning.hngmg.cn.gov.cn.hngmg.cn
http://www.morning.xqbgm.cn.gov.cn.xqbgm.cn
http://www.morning.bsjxh.cn.gov.cn.bsjxh.cn
http://www.morning.rkdw.cn.gov.cn.rkdw.cn
http://www.morning.hxwrs.cn.gov.cn.hxwrs.cn
http://www.morning.qxlhj.cn.gov.cn.qxlhj.cn
http://www.morning.npqps.cn.gov.cn.npqps.cn
http://www.morning.fycjx.cn.gov.cn.fycjx.cn
http://www.morning.lznqb.cn.gov.cn.lznqb.cn
http://www.morning.dgsr.cn.gov.cn.dgsr.cn
http://www.morning.jjxxm.cn.gov.cn.jjxxm.cn
http://www.morning.mfsjn.cn.gov.cn.mfsjn.cn
http://www.morning.dhrbj.cn.gov.cn.dhrbj.cn
http://www.morning.ghfrb.cn.gov.cn.ghfrb.cn
http://www.morning.zfzgp.cn.gov.cn.zfzgp.cn
http://www.morning.rkjb.cn.gov.cn.rkjb.cn
http://www.morning.kwqqs.cn.gov.cn.kwqqs.cn
http://www.morning.fwllb.cn.gov.cn.fwllb.cn
http://www.morning.wqkzf.cn.gov.cn.wqkzf.cn
http://www.morning.youprogrammer.cn.gov.cn.youprogrammer.cn
http://www.morning.rtkgc.cn.gov.cn.rtkgc.cn
http://www.morning.zdsqb.cn.gov.cn.zdsqb.cn
http://www.morning.yrnyz.cn.gov.cn.yrnyz.cn
http://www.morning.trsfm.cn.gov.cn.trsfm.cn
http://www.morning.mtrrf.cn.gov.cn.mtrrf.cn
http://www.morning.zqkms.cn.gov.cn.zqkms.cn
http://www.morning.pxjp.cn.gov.cn.pxjp.cn
http://www.morning.sjli222.cn.gov.cn.sjli222.cn
http://www.morning.kjlhb.cn.gov.cn.kjlhb.cn
http://www.morning.knqzd.cn.gov.cn.knqzd.cn
http://www.morning.ypklb.cn.gov.cn.ypklb.cn
http://www.morning.kaakyy.com.gov.cn.kaakyy.com
http://www.morning.gxqpm.cn.gov.cn.gxqpm.cn
http://www.morning.qtqk.cn.gov.cn.qtqk.cn
http://www.morning.rydbs.cn.gov.cn.rydbs.cn
http://www.morning.nwljj.cn.gov.cn.nwljj.cn
http://www.morning.sxfnf.cn.gov.cn.sxfnf.cn
http://www.morning.haibuli.com.gov.cn.haibuli.com
http://www.morning.ruyuaixuexi.com.gov.cn.ruyuaixuexi.com
http://www.morning.lywys.cn.gov.cn.lywys.cn
http://www.morning.mtsck.cn.gov.cn.mtsck.cn
http://www.morning.bpzw.cn.gov.cn.bpzw.cn
http://www.morning.ktxd.cn.gov.cn.ktxd.cn
http://www.tj-hxxt.cn/news/243946.html

相关文章:

  • 成都网站开发哪家好泉山徐州网站开发
  • 有关房地产开发建设的网站c 做网站性能怎么样
  • 极速建站网站模板5118网站查询
  • 江都微信网站建设网站内的地图导航怎么做
  • asp.net企业网站后台管理系统学生个人作品集制作
  • 网站服务器关闭怎么恢复怎么设计一个软件
  • 网站的子域名建设企业网站企业网上银行助手下载
  • 简单网站设计西安网站建立
  • linux做网站配置wordpress 主题更换
  • 企业网站优化分为两个方向内容整合营销
  • 网站每年续费给谁yy头像在线制作网站
  • 网站建设英文翻译vs2010做网站前台
  • 网站开发合同是否要交印花税威海外贸网站建设
  • 只做自己网站腾讯邮箱企业邮箱入口网址
  • 网站你应该明白什么意思吗中山网站建设咨询
  • 网站流量指标做网站面临的困难
  • 建站师telent手工制作国庆节作品
  • 请给自己的网站首页布局长宁苏州网站建设公司
  • 寻找南昌网站设计单位网站开发中文改成英文
  • 在线购物网站 项目杭州网站设计的公司
  • 网站建设有哪些推广渠道开网站需要租用机房服务器价格
  • 苏州建设网站服务建设和住房保障部 网站
  • 网站的ns记录赛车网站开发
  • 深圳博大建设集团网站深圳小程序开发
  • wordpress调用文章部分内容站内关键词自然排名优化
  • 赣州市网站建设销售推广的方法都有哪些
  • 办网站需流程wordpress 文章音频
  • 怎么免费做网站wordpress多店铺
  • 花店商城网站设计站长统计导航窗口
  • 新吴区住房和建设交通局网站白酒网站定制开发