Microsoft.Extensions.Logging Vs. NLog

家住魔仙堡 提交于 2019-12-11 08:29:39

问题


I see a lot of posts mentioning usage of Microsoft.Extensions.Logging together with NLog.

I'd like to better understand what Microsoft.Extensions.Logging is used for?

And specifically why is it needed or what's the benefit of using it together with NLog?


回答1:


With NLog you could do:

var logger = NLog.LogManager.GetCurrentClassLogger();
logger.Info("Hello {Name}", "Earth");

That works for all platforms and all frameworks.

Microsoft.Extensions.Logging

With the introduction of .NET Core, a logging abstraction is introduced by Microsoft - Microsoft.Extensions.Logging. You could use that logging abstraction in your project and integrate it with NLog.

For example in ASP.NET Core you could inject Microsoft.Extensions.Logging.ILogger<HomeController> and that could send the logs to NLog. (see Getting started with ASP.NET Core 2 · NLog/NLog Wiki)

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

For NLog and Microsoft.Extensions.Logging there are the following packages:

  • The .NET core logging abstractions are in the package Microsoft.Extensions.Logging.Abstractions
  • The NLog integration for those abstractions is in package NLog.Extensions.Logging. You could use this package for .NET Core console applications.
  • For ASP.NET Core, there is an optimized package NLog.Web.AspNetCore which uses NLog.Extensions.Logging

Comparision

NLog Pros

Pros of using NLog directly

  • Best performance
  • More options with the logger API, e.g. Logger.WithProperty(..)
  • Works in all platforms
  • No Dependency Injection needed which saves complexity.

Pros Microsoft.Extensions.Logging

Pros of using NLog via Microsoft.Extensions.Logging:

  • Fully integrated with ASP.NET Core, e.g. Microsoft also writes to the logger API and that will be also captured (and possible filtered) by NLog
  • Writing to the logging abstraction will make your code log-library independent.
  • Works well with .NET Core Dependency injection


来源:https://stackoverflow.com/questions/58209076/microsoft-extensions-logging-vs-nlog

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!