如何在ASP.Net Core中使用NLog

NLog是一个免费,开放源代码且易于使用的日志记录框架,它支持.Net Core和ASP.Net Core以及.Net Framework,Xamarin和其他Microsoft平台。 NLog易于配置和扩展,并具有对日志路由和管理功能的出色支持。 当您必须选择快速且灵活的日志记录框架时,这是一个不错的选择。

我以前的一篇文章中 ,我介绍了NLog的基础知识,以及如何使用它来使用.Net将数据记录到文件中。 在本文中,我们将探讨如何利用ASP.Net Core的依赖项注入内置支持将NLog用作中间件。

[紧跟InfoWorld的新闻通讯,这些通讯是针对软件开发人员,分析师,数据库程序员和数据科学家的 | 从我们的会员专享内幕文章中获取专家见解 ]

创建一个ASP.Net Core Web API项目

如果您运行的是Visual Studio 2017,则可以按照以下概述的步骤创建ASP.Net Core Web API项目。

  1. 启动Visual Studio IDE。
  2. 单击文件>新建>项目。
  3. 从显示的模板列表中选择“ ASP.Net Core Web应用程序(.Net Core)”。
  4. 指定项目的名称。
  5. 单击确定保存项目。
  6. 在“新的.Net Core Web应用程序…”窗口中选择“ API”。
  7. 选择要使用的ASP.Net Core版本。
  8. 取消选中“启用Docker支持”框,然后选择“不进行身份验证”,因为在这里我们将不使用这两种方法。
  9. 单击确定。

这将在Visual Studio 2017中创建一个新的ASP.Net Core项目。接下来,通过Visual Studio中的NuGet程序包管理器将以下两个程序包安装到项目中:

NLog.Config
NLog.Web.AspNetCore

在您的.Net Core项目中注册NLog

在项目中安装了NLog之后,下一步就是注册它。 要向ASP.NET Core项目中的管道注册NLog,可以在Startup.cs文件中编写以下代码。

public void Configure(IApplicationBuilder app, IHostingEnvironment env, LoggerFactory loggerFactory)
        {
            env.ConfigureNLog(“nlog.config”);
            loggerFactory.AddNLog();
            app.AddNLogWeb();
            //Other code
        }

第一条语句将使用托管环境实例配置NLog。 其他两个语句将分别向管道添加NLog和NLog.Web。

在ASP.Net Core控制器中使用NLog

现在,您已经在项目中安装并配置了NLog,现在可以利用依赖项注入来开始在控制器中使用NLog。 这是一个说明这一点的示例代码片段。

public class ValuesController : ControllerBase
 {
        protected readonly ILogger<ValuesController> _logger;
        public ValuesController(ILogger<ValuesController> logger = null)
        {
            if (null != logger)
            {
                _logger = logger;
            }
        }
      //Other controller methods
 }

现在参考前面给出的ValuesController类。 请注意,这里如何使用构造函数注入来注入依赖项,即记录器实例。

这就是全部。 现在,您可以使用以下代码以任何控制器方法开始记录应用程序数据。

[HttpGet]
 public ActionResult<IEnumerable<string>> Get()
  {
      _logger.LogInformation(“This is an info message sent from values controller.”);
      _logger.LogDebug(“This is a debug message sent from values controller.”);
      _logger.LogWarning(“This is a warning message sent from the values controller.”);
      _logger.LogError(“This is an error message sent from the values controller.”);
      return new string[] { “Hello”, “World!” };
  }

一个好的设计方法是将日志记录功能抽象到中间件组件,并将其注入到管道中。 这样,您可以更改中间件组件,而不必对控制器方法进行任何更改。

在ASP.Net Core中构建日志记录中间件组件

现在,让我们构建一个简单的中间件组件,将其注入到管道中,然后在控制器方法中使用它。 这是一个接口,其中包含用于记录各个级别数据的方法的声明。

public interface ILoggerManager
    {
        void LogInformation(string message);
        void LogWarning(string message);
        void LogDebug(string message);
        void LogError(string message);
    }

LoggerManager类实现ILoggerManager接口的方法,如下面的代码清单所示。

    using NLog;
    public class LoggerManager : ILoggerManager
    {
        private static NLog.ILogger logger = LogManager.GetCurrentClassLogger();
        public LoggerManager()
        {
        }
        public void LogDebug(string message)
        {
            logger.Debug(message);
        }
        public void LogError(string message)
        {
            logger.Error(message);
        }
        public void LogInformation(string message)
        {
            logger.Info(message);
        }
        public void LogWarning(string message)
        {
            logger.Warn(message);
        }
    }

ASP.Net Core内置了对依赖项注入的支持。 框架服务和应用程序服务都可以注入到您的类中,而不是紧密耦合。 现在,自定义LoggerService已准备就绪,您可以使用Startup.cs文件中的ConfigureServices方法将其直接注入管道中。 有三种方法可以做到这一点。 (您可以在我之前的一篇文章中阅读有关在ASP.Net Core中使用依赖注入的更多信息。”)

在此示例中,我们将利用注入依赖项的“单例”方式,即,将创建并共享一个实例。 以下代码行说明了如何将LoggerManager实例注入管道。

services.AddSingleton<ILoggerManager, LoggerManager>();

最后就是在控制器中使用记录器中间件的方法。

public class ValuesController : ControllerBase
 {
  protected readonly ILoggerManager _logger;
   public ValuesController(ILoggerManager logger = null)
   {
       if (null != logger)
       {
           _logger = logger;
       }
   }
 }

NLog是一个快速日志记录平台,也易于配置。 如我们所见,在ASP.Net Core中构建自定义中间件组件非常容易,该组件利用NLog记录应用程序数据。

From: https://www.infoworld.com/article/3301858/how-to-use-nlog-in-aspnet-core.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值