NLog 在ConfigureServices 中写入日志会导致日志在整个应用程序中丢失${aspnet-request-url} 和${aspnet-mvc-action}

问题描述 投票:0回答:1

我使用 NLog 在我的 Web API 应用程序上写入日志,(.Net 6)
我需要写入 ConfigureServices 方法中的日志。
由于此时 ILogger 不可用,所以我使用这种方式写入日志:

var logger = LogManager.GetCurrentClassLogger();
logger.Log(NLog.LogLevel.Debug, "my data");

它可以工作并正确写入日志,
但问题是,如果此代码存在,则在整个应用程序和all后续请求中,${aspnet-request-url}${aspnet-mvc-action}属性在日志中显示为空。
如果我删除此代码 - 它们在所有请求中都显示为完整。

我尝试将写入日志的方式更改为其他方式:

var sp = services.BuildServiceProvider();
var logger = sp.GetService<ILogger<Startup>>();
logger.LogDebug("my data");

也写得正确,但是两个属性${aspnet-request-url}${aspnet-mvc-action}的问题还是一样,都显示为empty

我的问题是:
一方面如何通过ConfigureServices方法中的NLog写入日志,
另一方面,不要丢失两个 ${aspnet-request-url}${aspnet-mvc-action} 属性?

附注
我想再次指出,在所有发生的请求中,它们都是空的之后
不仅是在本文中,从配置服务方法。

asp.net-core-webapi nlog ilogger
1个回答
0
投票

在应用程序启动过程中很早就调用

LogManager.GetCurrentClassLogger()
时,在
UseNLog()
自动注册NLog.Web扩展之前,需要手动执行此操作。

确保

NLog.config
注册扩展,如下所示:

  <!-- enable asp.net core layout renderers -->
  <extensions>
    <add assembly="NLog.Web.AspNetCore"/>
  </extensions>

来自这样的代码的替代寄存器扩展:

var logger = NLog.LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();

注意

Startup.cs
ConfigureServices
似乎是 NET5(及更早版本)的遗产。有了 NET6,微软开始销售一种不同的方法:https://github.com/NLog/NLog/wiki/Getting-started-with-ASP.NET-Core-6

© www.soinside.com 2019 - 2024. All rights reserved.