在本章中,也便是整个系列的榜首部分将介绍怎么定制日志记载(系列内容查阅《玩转结构-序文》)。默许日志记载仅写入操控台或调试窗口,这在大多数状况下都很好,但有时须要写入到文件或数据库,或许,您或许期望扩展日志记载的其他信息。在这些状况下,您须要知道怎么更改默许日志记载。
在本章,咱们将介绍以下主题:
装备日志记载
创立自界说日志记载
运用第三方日志结构
以上主题触及结构的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。
运用第三方日志结构NLogNLog是最早的一款可用于的日志结构,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"//rules2.引进NuGet包然后咱们须要NuGet增加NLog的包:
3.将NLog与IWebHostBuilder结合运用铲除ConfigureLogging办法中的其他供给程序,运用UseNLog()办法将NLog与IWebHostBuilder结合运用:
(args).ConfigureWebHostDefaults(webBuilder={((hostingContext,logging)={//铲除其他供给程序();();}).UseNLog().UseStartupStartup();});运用minimalAPI看起来容易得多:
;varbuilder=(args);//铲除其他供给程序();();();
在这儿,您能够根据须要增加恣意多个日志记载供给程序。
回忆考虑现在,让咱们回忆一下本文所包括的内容:
装备日志记载
创立自界说日志记载
运用第三方日志结构
本文暂无评论 - 欢迎您