视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
.Net Core学习教程之在Mvc中简单的使用日志组件
2020-11-27 22:35:01 责编:小采
文档


前言

本文是基于 .Net Core 2.0,只是蜻蜓点水,并非深入浅出。给大家介绍了关于.Net Core在Mvc中使用日志组件的相关内容,分享出供大家参考学习,下面话不多说了,来一起看看详细的介绍吧

目录

使用内置的日志组件

简单过渡到第三方组件 - NLog 

使用内置的日志

下面使用控制器 HomeController.cs 进行演示。

需要 using Microsoft.Extensions.Logging;

方案一:

public class HomeController : Controller
 {
 private readonly ILogger _logger ;

 public HomeController(ILoggerFactory loggerFactory)
 {
 _logger = loggerFactory.CreateLogger(typeof(HomeController));
 }
 }

方案二:

public class HomeController : Controller
 {
 private readonly ILogger _logger ;

 public HomeController(ILogger<HomeController> logger)
 {
 _logger = logger;
 }
 }

方案三:

public class HomeController : Controller
 {
 private readonly ILogger _logger ;

 public HomeController(ILogger logger)
 {
 _logger = logger;
 }
 }

三种都是通过注入的方式获取日志记录器对象,在过去,我们会自己封装类似这些 Debug、Info 和 Error 等不同日志等级的方法,现在我们看看内置的方法是如何使用的? 

在 HomeController 内添加 Index() 方法进行测试。

public IActionResult Index()
 {
 _logger.LogDebug($"测试:{DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
 _logger.LogError($"测试:{DateTime.Now.ToString(CultureInfo.InvariantCulture)}");
 _logger.LogInformation($"测试:{DateTime.Now.ToString(CultureInfo.InvariantCulture)}");

 return Json(Guid.NewGuid());
 }

在输出结果中我们可以看到,不同日志的等级在控制台中会以不同的颜色进行标注。

 

每种级别的 Log 都有多个方法重载,如 LogInformation() ,示例演示的代码中使用的是比较简单一种,也就是最后一种。

//
 // 摘要:
 // Formats and writes an informational log message.
 //
 // 参数:
 // logger:
 // The Microsoft.Extensions.Logging.ILogger to write to.
 //
 // eventId:
 // The event id associated with the log.
 //
 // message:
 // Format string of the log message.
 //
 // args:
 // An object array that contains zero or more objects to format.
 public static void LogInformation(this ILogger logger, EventId eventId, string message, params object[] args);
 //
 // 摘要:
 // Formats and writes an informational log message.
 //
 // 参数:
 // logger:
 // The Microsoft.Extensions.Logging.ILogger to write to.
 //
 // exception:
 // The exception to log.
 //
 // message:
 // Format string of the log message.
 //
 // args:
 // An object array that contains zero or more objects to format.
 public static void LogInformation(this ILogger logger, Exception exception, string message, params object[] args);
 //
 // 摘要:
 // Formats and writes an informational log message.
 //
 // 参数:
 // logger:
 // The Microsoft.Extensions.Logging.ILogger to write to.
 //
 // message:
 // Format string of the log message.
 //
 // args:
 // An object array that contains zero or more objects to format.
 public static void LogInformation(this ILogger logger, string message, params object[] args);

其它细节以及详情,或者希望使用其它日志组件可参考官方文档:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/?tabs=aspnetcore2x

简单过渡到第三方组件 - NLog

Nuget 安装 NLog.Web.AspNetCore(目前 Nuget 最新为 4.4.1,但是官方的教程却是 4.5 的,小编使用 4.4.1 进行演示)。如需 4.5+ 可参考官方:https://github.com/NLog/NLog.Web/wiki/Getting-started-with-ASP.NET-Core-2

下面演示如何将内置的组件简单的移植到 NLog 中。

先在根目录创建配置文件 nlog.config,记得将属性修改成始终复制到目录:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 autoReload="true"
 internalLogLevel="info"
 internalLogFile="c:\temp\internal-nlog.txt">


 <!-- the targets to write to -->
 <targets>
 <!-- write logs to file -->
 <target xsi:type="File" name="allfile" fileName="c:\temp\nlog-all-${shortdate}.log"
 layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />

 <!-- another file log, only own logs. Uses some ASP.NET core renderers -->
 <target xsi:type="File" name="ownFile-web" fileName="c:\temp\nlog-own-${shortdate}.log"
 layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
 </targets>

 <!-- rules to map from logger name to target -->
 <rules>
 <!--All logs, including from Microsoft-->
 <logger name="*" minlevel="Trace" writeTo="allfile" />

 <!--Skip non-critical Microsoft logs and so log only own logs-->
 <logger name="Microsoft.*" maxLevel="Info" final="true" /> <!-- BlackHole without writeTo -->
 <logger name="*" minlevel="Trace" writeTo="ownFile-web" />
 </rules>
</nlog>

修改 Startup.cs 类中的 Configure() 方法,其它地方都不需要做出任何修改。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
 {
 loggerFactory.AddNLog(); //添加NLog 
 env.ConfigureNLog("nlog.config"); //读取Nlog配置文件 

 //... 
 }

启动程序,你会发现:

总结

下载本文
显示全文
专题