当前位置: 首页 > 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://wiki.neutronadmin.com/news/266071/

相关文章:

  • 网站子目录是什么意思苏州餐饮 网站建设
  • 网站建设维护是啥意思长春网站建设q479185700強
  • 中企动力做的网站经常打不开社交网站开发语言
  • 源码下载网站推荐自建网站推广方式
  • 网站怎么做cp备案号阿里网站备案管理系统
  • 怎样修改静态公司网站页面电话房网
  • 2017网站发展趋势暂时没有域名怎么做网站
  • 雷山网站建设免费律师咨询平台
  • 米思米网站订单取消怎么做营销型网站建设价值
  • 他达拉非片新乡网站优化
  • 做公司网站需要什么资料静态网站注入
  • 鞍山一般做一个网站需要多少钱网络求职做阿姨哪个网站好
  • 使用万网怎么做网站网站建设中html页面
  • 网站备案许可证号网站开通银行支付接口
  • 网站添加微博企业酒店的网站建设
  • 响应式设计网站韩国优秀设计网站
  • 深圳分销网站设计价格合肥今天发现了一例病例吗
  • apache搭建多个网站网站代维护
  • 网站关键词突然搜不到软文推广系统
  • 房产律师网站模板永久免费的仓库
  • 中国最有名的网站建设公司湖南网站营销seo多少费用
  • 推荐聊城做网站怀化人社网站
  • 做网站开发要多久馆陶网站
  • 网站建设留言板实验心得网络营销课程心得体会300字
  • 服务网站建设企业网站的内容规划怎么写
  • 网站换ip 有多大影响山东大标网络
  • 网站设计主题选择wordpress代码编辑插件
  • iis7 网站防盗链扬州市建设工程造价管理站网站
  • 旅游网站开发项目策划书优设网站怎么下载
  • 江苏建设厅执业网站大连工业大学是211还是985