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

百度站长官网智慧团建官网手机版

百度站长官网,智慧团建官网手机版,天津企业网站建设价格,网站建设的需要分析为了对各种日志框架进行整合#xff0c;微软创建了一个用来提供统一的日志编程模式的日志框架。《ASP.NET Core 6框架揭秘》实例演示[13]#xff1a;日志的基本编程模式》以实例演示的方式介绍了日志的基本编程模式#xff0c;现在我们来补充几种“进阶”用法。[本文节选《A…为了对各种日志框架进行整合微软创建了一个用来提供统一的日志编程模式的日志框架。《ASP.NET Core 6框架揭秘》实例演示[13]日志的基本编程模式》以实例演示的方式介绍了日志的基本编程模式现在我们来补充几种“进阶”用法。[本文节选《ASP.NET Core 6框架揭秘》第8章][S808]利用配置定义日志过滤规则源代码[S809]利用日志范围输出调用链源代码[S810]LoggerMessage的应用源代码[S812]基于Activity的日志范围源代码[S808]利用配置定义日志过滤规则通过Funcstring, string, LogLevel, bool对象表示的日志过滤规还可以采用配置的形式来定义。以配置的形式定义的过滤规则最终都体现为对最低等级的设置设定的这个最低日志等级可以是一个全局的默认设置也可以专门针对某个日志类别或者ILoggerProvider类型。下面演示针对配置形式的日志过滤规则。我们先创建一个名为logging.json的文件并在其中定义如下这段配置然后将“Copy to Output Directory”的属性设置为“Copy Always”。这段配置定义了两组日志过滤规则第一组是默认规则第二组则是专门为ConsoleLoggerProvider别名为Console定义的过滤规则。{LogLevel: {Default : Error,Foo : Debug},Console: {LogLevel: {Default : Information,Foo : Warning,Bar : Error}} }以配置形式定义的日志过滤规则最终会落实到对最低日志等级的设置上其中Default表示默认设置其他的则是针对具体日志类别的设置。上面定义的这段配置体现的过滤规则如下对于ConsoleLoggerProvider来说在默认情况下只有等级不低于Information的日志事件会被输出而对日志类别“Foo”和“Bar”来说对应的最低日志等级分别为Warning和Error。对于其他ILoggerProvider类型来说如果日志类别为“Foo”那么只有等级不低于Debug的日志才会被输出其他日志类别则采用默认的等级Error。为了检验最终是否会采用配置定义的规则对日志消息进行过滤我们根据配置文件生成对应的IConfiguration对象然后采用依赖注入的方式创建一个ILoggerFactory对象。我们将IConfiguration对象作为参数调用ILoggingBuilder接口的AddConfiguration扩展方法将配置承载的过滤规则应用到配置模型上。我们最终采用不同的类别“Foo”、“Bar”和“Baz”创建了三个ILogger对象并利用它们记录了六条具有不同等级的日志。using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging;var configuration  new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile(logging.json).Build();var loggerFactory  new ServiceCollection().AddLogging(builder  builder.AddConfiguration(configuration).AddConsole().AddDebug()).BuildServiceProvider().GetRequiredServiceILoggerFactory();Log(loggerFactory, Foo); Log(loggerFactory, Bar); Log(loggerFactory, Baz);Console.Read();static void Log(ILoggerFactory loggerFactory, string category) {var logger  loggerFactory.CreateLogger(category);var levels  (LogLevel[])Enum.GetValues(typeof(LogLevel));levels  levels.Where(it  it ! LogLevel.None).ToArray();var eventId  1;Array.ForEach(levels, level  logger.Log(level, eventId, This is a/an {0} log message., level));由于我们注册了两个不同的ILoggerProvider类型创建了三种基于不同日志类别的ILogger对象所以这里面涉及分发的36条日志消息。而图1是程序执行以Debug模式进行编译之后控制台和Visual Studio调试输出窗口的输出结果。图1 针对配置文件的日志过滤[S809]利用日志范围输出调用链日志可以为针对某种目的如纠错查错、系统优化和安全审核等而进行的分析提供原始数据所以孤立存在的一条日志消息对数据分析往往毫无用处很多问题只有将多条相关的日志消息综合起来分析才能找到答案。日志框架为此引入了日志范围Log Scope的概念。所谓的日志范围是为日志记录创建的一个具有唯一标识的上下文如果注册的ILoggerProvider对象支持这个特性那么它提供的ILogger对象会感知到当前日志范围的存在此时它可以将上下文信息一并记录下来。在接下来演示的实例中我们将一个包含多个处理步骤的事务作为日志范围并将各个步骤的执行耗时记录下来。如下面的代码片段所示我们利用依赖注入容器创建一个ILogger对象。在调用AddConsole扩展方法注册ConsoleLoggerProvider对象之后我们接着调用AddSimpleConsole扩展方法为它注册了一个简单的格式化器该方法接受一个ActionSimpleConsoleFormatterOptions对象作为参数来对格式化器配置选项进行设置。我们利用传入的这个委托将配置选项的IncludeScopes属性设置为True。using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System.Diagnostics;var logger  new ServiceCollection().AddLogging(builder  builder.AddConsole().AddSimpleConsole(options  options.IncludeScopes  true)).BuildServiceProvider().GetRequiredServiceILoggerProgram();using (logger.BeginScope($Foobar Transaction[{Guid.NewGuid()}])) {var stopwatch  Stopwatch.StartNew();await Task.Delay(500);logger.LogInformation(Operation foo completes at {0}, stopwatch.Elapsed);await Task.Delay(300);logger.LogInformation(Operation bar completes at {0}, stopwatch.Elapsed);await Task.Delay(800);logger.LogInformation(Operation baz completes at {0}, stopwatch.Elapsed); } Console.Read();日志范围是通过调用ILogger对象的BeginScope方法创建的我们在调用这个方法时指定一个携带请求ID的字符串来描述并标识创建日志范围。创建的日志范围上下文体现为一个IDisposable对象范围因Dispose方法的调用而终结。对于支持日志范围的ILoggerProvider对象来说它提供的ILogger对象自身能够感知到当前上下文的存在所以我们演示程序并不需要作额外的修改。在我们演示的程序中执行的事务包含三个操作Foo、Bar和Baz。我们将事务开始的那一刻作为基准记录每个操作完成的时间。该程序启动后会将日志以图2所示的形式输出到控制台上可以看出包含事务ID的日志范围上下文描述信息一并被记录下来。如果日志最终被写入海量存储中只要知道请求ID我们就能将相关的日志提取出来并利用它们构建出该请求的调用链。图2 记录日志范围上下文[S810]LoggerMessage的应用前面演示的程序总是指定一个包含占位符“{数字}”或者“{文本}”的消息模板作为参数调用ILogger对象的Log方法来记录日志所以该方法每次都需要对提供的消息模板进行解析。如果每次提供的都是相同的消息模板那么这种对消息模板的重复解析就会显得多余。如果应用对性能要求比较高这绝不是一种好的编程方式。为了解决这个问题日志框架提供了一个名为LoggerMessage的静态类型我们可以利用它根据某个具体的消息模板创建一个委托来记录日志。在如下所示的演示程序中我们利用日志将针对FoobarAsync方法的“调用现场”记录下来具体记录的内容包括输入参数、返回值和执行耗时。如代码片段所示我们根据FoobarAsync的定义调用LoggerMessage类型的静态Define方法创建了一个ActionILogger, int, long, double, TimeSpan, Exception类型的委托对象来记录日志。using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; using System.Diagnostics;var random  new Random(); var template  Method FoobarAsync is invoked. \n\t\tArguments: foo{foo}, bar{bar} \n\t\tReturn value: {returnValue} \n\t\tTime:{time}; var log  LoggerMessage.Defineint, long, double, TimeSpan(logLevel: LogLevel.Trace,eventId: 3721,formatString: template); var logger  new ServiceCollection().AddLogging(builder  builder.SetMinimumLevel(LogLevel.Trace).AddConsole()).BuildServiceProvider().GetRequiredServiceILoggerFactory() .CreateLogger(App.Program);await FoobarAsync(random.Next(), random.Next()); await FoobarAsync(random.Next(), random.Next()); Console.Read();async Taskdouble FoobarAsync(int foo, long bar) {var stopwatch  Stopwatch.StartNew();await Task.Delay(random.Next(100, 900));var result  random.Next();log(logger, foo, bar, result, stopwatch.Elapsed, null);return result; }《ASP.NET Core 6框架揭秘》实例演示[01]编程初体验 《ASP.NET Core 6框架揭秘》实例演示[02]各种形式的API开发 《ASP.NET Core 6框架揭秘》实例演示[03]Dapr初体验 《ASP.NET Core 6框架揭秘》实例演示[04]自定义依赖注入框架 《ASP.NET Core 6框架揭秘》实例演示[05]依赖注入基本编程模式 《ASP.NET Core 6框架揭秘》实例演示[06]依赖注入框架设计细节 《ASP.NET Core 6框架揭秘》实例演示[07]文件系统 《ASP.NET Core 6框架揭秘》实例演示[08]配置的基本编程模式 《ASP.NET Core 6框架揭秘》实例演示[09]将配置绑定为对象 《ASP.NET Core 6框架揭秘》实例演示[10]Options基本编程模式 《ASP.NET Core 6框架揭秘》实例演示[11]诊断跟踪的几种基本编程方式  《ASP.NET Core 6框架揭秘》实例演示[13]日志的基本编程模式
http://www.yutouwan.com/news/266071/

相关文章:

  • 好的平面网站模板知春路网站建设
  • 网站开发作为固定资产怎么摊销3 阐述网站建设的步骤过程 9分
  • 网站建设准备工作总结网店代运营服务
  • 松原建设小学网站WordPress黑镜主题下载
  • 网站正在建设中提示页面深圳网站建设需要多少费用
  • 河南省建设厅注册中心网站如何将自己 做的网站发布网上
  • 建设厅电工证查询网站四川网站建设套餐
  • 产品网站策划书方案做视频网站推广挣钱吗
  • 潍坊视频类网站建设网站公司怎么建站
  • 电商网站开发周期看空间
  • 大兴模版网站建设哪家好个人电影网站建设
  • 内江市规划建设教育培训中心网站宁波市网站建设制作费用
  • 新乡网站建设专业熊掌网络做导购网站要多少钱
  • 商业网站 模板wordpress 标题入库
  • 成都网站系统开发大通证券手机版下载官方网站下载
  • 教育网站开发用例图三类人员 网站开发
  • 网站建设公司咨html编辑器安卓版下载
  • wordpress网站正在建设中网站开发 实名认证需要备案吗
  • 建站报价怎么做淘宝网站的网页
  • 淘宝客网站做seo有用吗公司申请网站建设
  • 数据统计网站淄博网站建设卓迅网络
  • 设计出色的网站网站规划详细设计怎么写
  • 织梦 网站地图 样式怎么做网站渗透
  • 男女之间做那个事情很污的网站天津企业网络建站
  • 重庆网站制作教程aso优化报价
  • 自己建的网站如何推广网站建设 交单流程
  • 网站建设教学后记微信公众号开发软件
  • 做的网站一定要收录么买域名
  • 网站开发侵权高端品牌家具排名前十名
  • 国内外优秀网站设计找人做网站注意什么