NLog是一个免费,开放源代码且易于使用的日志记录框架,它支持.Net Core和ASP.Net Core以及.Net Framework,Xamarin和其他Microsoft平台。 NLog易于配置和扩展,并具有对日志路由和管理功能的出色支持。 当您必须选择快速且灵活的日志记录框架时,这是一个不错的选择。
在我以前的一篇文章中 ,我介绍了NLog的基础知识,以及如何使用它来使用.Net将数据记录到文件中。 在本文中,我们将探讨如何利用ASP.Net Core的依赖项注入内置支持将NLog用作中间件。
创建一个ASP.Net Core Web API项目
如果您运行的是Visual Studio 2017,则可以按照以下概述的步骤创建ASP.Net Core Web API项目。
- 启动Visual Studio IDE。
- 单击文件>新建>项目。
- 从显示的模板列表中选择“ ASP.Net Core Web应用程序(.Net Core)”。
- 指定项目的名称。
- 单击确定保存项目。
- 在“新的.Net Core Web应用程序…”窗口中选择“ API”。
- 选择要使用的ASP.Net Core版本。
- 取消选中“启用Docker支持”框,然后选择“不进行身份验证”,因为在这里我们将不使用这两种方法。
- 单击确定。
这将在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