正规代孕服务机构费用_供卵代生双胞胎包男孩_〔最新价格表〕_圣玛丽国际医疗机构

如何定制.NET6.0的日志记录

分类:知识科普   浏览:20℃   发布于:3年前 (2023-09-07)
简介: 在本章中,也便是整个系列的榜首部分将介绍

在本章中,也便是整个系列的榜首部分将介绍怎么定制日志记载(系列内容查阅《玩转结构-序文》)。默许日志记载仅写入操控台或调试窗口,这在大多数状况下都很好,但有时须要写入到文件或数据库,或许,您或许期望扩展日志记载的其他信息。在这些状况下,您须要知道怎么更改默许日志记载。

在本章,咱们将介绍以下主题:

装备日志记载

创立自界说日志记载

运用第三方日志结构

以上主题触及结构的Host层。


技能要求

为了演示,咱们创立一个运用程序。请翻开操控台、shell或Bash终端,然后切换到作业目录,然后运用以下指令创立新的运用程序:

dotnetnewmvc-nLoggingSample-oLoggingSample

在VisualStudio中双击翻开该项目,或许在操控台中键入以下指令用VisualStudioCode翻开该项目:

cdLoggingSamplecode.
装备日志记载

在的前期版别中(即2.0版之前的版别),日志记载是在装备的。之后文件渐渐简化,许多装备被移动到的WebHostBuilder,日志记载也是在这个时期被移动到WebHostBuilder。

在及更高版其他程序,文件变得愈加通用,IHostBuilder将最早创立,它是引导运用发动的要害(咱们将在后边详解IHostBuilder),经过IHostBuilder,咱们能够创立IWebHostBuilder用以装备:

publicclassProgram{publicstaticvoidMain(string[]args){CreateHostBuilder(args).Build().Run();}publicstaticIHostBuilderCreateHostBuilder(string[]args)=(args).ConfigureWebHostDefaults(webBuilder={();});}

在中,Microsoft引进了简化装备的迷你API(minimalAPI)办法。这种办法不运用Startup文件,而是将一切装备增加到文件,如下代码段:

varbuilder=(args);//增加服务到容器.();varapp=();…

在,您能够掩盖和自界说简直一切内容,包括日志记载。IWebHostBuilder有许多扩展办法,答应咱们掩盖不同功用的默许行为。要掩盖日志记载的默许设置,咱们须要运用ConfigureLogging办法。

以下代码片段显现的日志记载与上面的ConfigureWebHostDefaults()办法中装备的日志记载简直完全相同:

(args).ConfigureWebHostDefaults(webBuilder={((hostingContext,logging)={(("Logging"));();();}).UseStartupStartup();
(("Logging"));();();

现在咱们现已了解了怎么装备日志记载,接下来咱们看看怎么自界说日志记载。

创立自界说日志记载

为了演示,咱们在这儿创立一个小而容易的日志记载器,它能够在操控台中运用特定的日志等级对日志条目进行上色。此日志记载称为ColoredConsoleLogger,它会运用LoggerProvider创立。要指定色彩和日志等级,咱们还须要增加一个装备类Configuration。

在接下来的代码片段中,将别离创立这三个要害类(Configuration、LoggerProvider和Logger):

1.ColoredConsoleLoggerConfiguration

咱们创立一个名为的文件中,它与坐落同一文件夹中,咱们在中创立ColoredConsoleLoggerConfiguration,该装备类包括三个可设置的特点:LogLevel、EventId和Color:

publicclassColoredConsoleLoggerConfiguration{publicLogLevelLogLevel{get;set;}=;publicintEventId{get;set;}=0;publicConsoleColorColor{get;set;}=;}
2.ColoredConsoleLoggerProvider

接下来,咱们须要一个供给程序来检索装备并创立实践的日志记载实例

publicclassColoredConsoleLoggerProvider:ILoggerProvider{privatereadonlyColoredConsoleLoggerConfiguration_config;privatereadonlyConcurrentDictionarystring,ColoredConsoleLogger_loggers=newConcurrentDictionarystring,ColoredConsoleLogger();publicColoredConsoleLoggerProvider(ColoredConsoleLoggerConfigurationconfig){_config=config;}publicILoggerCreateLogger(stringcategoryName){return_(categoryName,name=newColoredConsoleLogger(name,_config));}publicvoidDispose(){_();}}
3.ColoredConsoleLogger

第三类是咱们真实运用的日志记载器:

publicclassColoredConsoleLogger:ILogger{privatestaticreadonlyobject_lock=newObject();privatereadonlystring_name;privatereadonlyColoredConsoleLoggerConfiguration_config;publicColoredConsoleLogger(stringname,ColoredConsoleLoggerConfigurationconfig){_name=name;_config=config;}publicIDisposableBeginScopeTState(TStatestate){returnnull;}publicboolIsEnabled(LogLevellogLevel){returnlogLevel==_;}publicvoidLogTState(LogLevellogLevel,EventIdeventId,TStatestate,Exceptionexception,FuncTState,Exception,stringformatter){if(!IsEnabled(logLevel)){return;}lock(_lock){if(_==0||_==){varcolor=;=_;(34;{}-{_name}-");(#34;{formatter(state,exception)}\n");=color;}}}}

咱们现在须要lock(确定)操控台的输出——这是由于操控台自身并不是真实的线程安全的,或许呈现过错的上色。

完成后,咱们能够将新的记载刺进到的装备中。

usingLoggingSample;();varconfig=newColoredConsoleLoggerConfiguration{LogLevel=,Color=};(newColoredConsoleLoggerProvider(config));

首要须要向引进LoggerSample命名空间。

usingLoggingSample;

假如不想运用现有的日志结构,能够铲除之前增加的一切日志结构供给程序

();

然后,咱们调用AddProvider来增加ColoredConsoleLoggerProvider实例。

这儿装备了不同的日志等级,您能够运用这种办法发送有关过错的电子邮件,或许将调试音讯记载到其他日志接收器等等。

下图显现了日志结构的五颜六色输出:


在许多时期,编写自界说日志结构是没有意义的,由于现已有许多优异的第三方日志记载结构可用,例如ELMAH、log4net和NLog。

下面,咱们将介绍怎么在中运用NLog。

运用第三方日志结构NLog

NLog是最早的一款可用于的日志结构,NLog供给了一个日志记载供给程序插件,能够方便地刺进。(你能够经过NuGet找到NLog)

1.装备Nlog

咱们须要增加一个装备文件,用于界说两个不同的日志记载:

一切规范音讯记载在一个日志文件中;

而自界说音讯记载在另一个文件中

targets!--规范音讯--targetxsi:type="File"name="allfile"fileName="C:\git\dotnetconf\001-logging\nlog-all-${shortdate}.log"layout="${longdate}|${event-properties:item=}|${logger}|${uppercase:${level}}|${message}${exception}"/!--自界说音讯--targetxsi:type="File"name="ownFile-web"fileName="C:\git\dotnetconf\001-logging\nlog-own-${shortdate}.log"layout="${longdate}|${event-properties:item=}|${logger}|${uppercase:${level}}|${message}${exception}|url:${aspnet-request-url}|action:${aspnet-mvc-action}"/targetxsi:type="Null"name="blackhole"//targets!--rulestomapfromloggernametotarget--rules!--Alllogs,includingfromMicrosoft--loggername="*"minlevel="Trace"writeTo="allfile"/!--SkipMicrosoftlogsandsologonlyownlogs--loggername="Microsoft.*"minlevel="Trace"writeTo="blackhole"final="true"/loggername="*"minlevel="Trace"writeTo="ownFile-web"//rules
2.引进NuGet包

然后咱们须要NuGet增加NLog的包:

3.将NLog与IWebHostBuilder结合运用

铲除ConfigureLogging办法中的其他供给程序,运用UseNLog()办法将NLog与IWebHostBuilder结合运用:

(args).ConfigureWebHostDefaults(webBuilder={((hostingContext,logging)={//铲除其他供给程序();();}).UseNLog().UseStartupStartup();});

运用minimalAPI看起来容易得多:

;varbuilder=(args);//铲除其他供给程序();();();

在这儿,您能够根据须要增加恣意多个日志记载供给程序。

回忆考虑

现在,让咱们回忆一下本文所包括的内容:

装备日志记载

创立自界说日志记载

运用第三方日志结构

本文暂无评论 - 欢迎您