前言
昨天分享了在 .NET Core Console 项目中应用 NLog 写日志的详细例子,有几位小伙伴私信说 ASP.NET Core Web Api 项目中无法使用,其实在 ASP.NET Core Web Api 项目中应用 NLog 写日志,跟 .NET Core Console 项目是有些不一样的,今天我特地写了一个在 ASP.NET Core Web Api 项目中应用 NLog 写日志的例子,我们来看看如何在 ASP.NET Core Web Api 项目中应用 NLog 写日志?
不废话,直接上 Step By Step 例子。
Step By Step 步骤
- 创建一个 ASP.NET Core Web Api 项目
- 下载 Nuget 包
NLog.Web.AspNetCore
3.手动添加 nlog.config 文件,并设置复制到输出目录-如果较新则复制
- 可直接复制粘贴 《分享一个 .NET Core Console 项目中应用 NLog 写日志的详细例子》 一文中的
附录:NLog.config 内容
4.在 Program.cs 注入 NLog 服务(留意注释)
using NLog.Web; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); // 注入 NLog builder.Logging.AddNLog("nlog.config"); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseAuthorization(); app.MapControllers(); app.Run();
5.在 Controller 中使用
using Microsoft.AspNetCore.Http.Features; using Microsoft.AspNetCore.Mvc; using System.Text; namespace NLogSample.Controllers { [ApiController] [Route("iclock")] public class TestController : ControllerBase { private readonly ILogger<XFaceController> _logger; // 在构造方法中注入 ILogger 实例 public TestController(ILogger<XFaceController> logger) { _logger = logger; } [HttpGet] [Route("cdata")] public IActionResult Init() { var s = "OK"; // 写日志 _logger.LogInformation($"Return: {s}"); return Ok(s); } } }
附录:NLog.config 内容
参见 《分享一个 .NET Core Console 项目中应用 NLog 写日志的详细例子》 一文中的 附录:NLog.config 内容
总结
NLog 在 .NET Core Console 项目和 ASP.NET Core Web Api 项目中所使用的包并不相同,注册到容器的方式也不一样,这主要是由于它们的应用架构和生命周期不同所导致的。
.NET Core Console 项目,没有像 ASP.NET Core Web Api 那样内置的依赖注入容器,因此,在 Console 项目中,需要手动配置 NLog。而 ASP.NET Core Web Api 项目,使用内置的依赖注入容器来管理服务的生命周期和依赖关系,在这种情况下,可以将 NLog 配置为服务之一,然后将其注入到容器中。
这些差异,在注册其他第三方包时也会有,大家可仔细辨别体会。
我是老杨,一个奋斗在一线的资深研发老鸟,让我们一起聊聊技术,聊聊人生。
都看到这了,求个点赞、关注、在看三连呗,感谢支持。