我看到很多帖子提到将 Microsoft.Extensions.Logging 与 NLog 一起使用。
我想更好地了解 Microsoft.Extensions.Logging 的用途是什么?
具体来说为什么需要它或者与 NLog 一起使用它有什么好处?
使用 NLog 你可以这样做:
var logger = NLog.LogManager.GetCurrentClassLogger();
logger.Info("Hello {Name}", "Earth");
这适用于所有平台和所有框架。
Microsoft.Extensions.Logging
通过 .NET Core,Microsoft 引入了ILogger抽象 https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-GetCurrentClassLogger-and-Microsoft-ILogger来自 Microsoft.Extensions.Logging。您可以在项目中使用该日志记录抽象并将其与 NLog 集成。
例如,在 ASP.NET Core 中,您可以注入Microsoft.Extensions.Logging.ILogger<HomeController>
并且可以将日志发送到 NLog。 (看ASP.NET Core 2 入门 · NLog/NLog Wiki https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-2)
using Microsoft.Extensions.Logging;
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("Index page says hello {Name}", "Universe");
return View();
}
Packages
对于 NLog 和 Microsoft.Extensions.Logging 有以下包:
- .NET 核心日志记录抽象位于包中Microsoft.Extensions.Logging.Abstractions https://www.nuget.org/packages/Microsoft.Extensions.Logging.Abstractions/
- 这些抽象的 NLog 集成位于包中NLog.扩展.日志记录 https://www.nuget.org/packages/NLog.Extensions.Logging/。您可以将此包用于 .NET Core 控制台应用程序。
- 对于ASP.NET Core,有一个优化包NLog.Web.AspNetCore https://www.nuget.org/packages/NLog.Web.AspNetCore它使用 NLog.Extensions.Logging
比较
NLog 优点
直接使用 NLog 的优点
- 最棒的表演
- 记录器 API 的更多选项,例如
Logger.WithProperty(..)
- 适用于所有平台
- 无需依赖注入,从而节省了复杂性。
Microsoft.Extensions.Logging 的优点
通过 Microsoft.Extensions.Logging 使用 NLog 的优点:
- 与 ASP.NET Core 完全集成,例如Microsoft 还会写入记录器 API,并且 NLog 也会捕获(并可能过滤)
- 写入日志抽象将使您的代码独立于日志库。
- 与 .NET Core 依赖注入配合良好
-
new: 你可以使用 appsettings.json 配置 NLog https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-configuration-with-appsettings.json- 所以用 JSON 而不是 XML
更新:添加-将 NLog 与 appsettings.json 结合使用 https://github.com/NLog/NLog.Extensions.Logging/wiki/NLog-configuration-with-appsettings.json
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)