背景:
我正在构建由 NLog 支持的日志类库。想法是在我们的应用程序中使用这个类库来满足我们的日志记录需求。作为该库的一部分,我们编写了继承自
AspNetLayoutRenderersBase
的自定义 AspNetLayoutRenderers。类库针对.NET Standard 2.0 和.NET 6。我们有一些应用程序基于.NET Framework,有些应用程序针对.NET 6。类库使用NLog.Web.AspNetCore
包。
问题描述: 自定义 AspNetLayoutRenderer 在 .NET 6 Web 应用程序中完美运行,但它们无法在完整框架 (.NET Framework 4.7.2) 上运行。 ASPNET 布局渲染器中内置的 NLog 也无法正常工作。
启用NLog内部日志后,我们发现以下条目。
No available HttpContext, because outside valid request context. Logger: Logging.SampleApp.NetFramework.Controllers.HomeController
执行的故障排除:
在
NLog.Web.AspNetCore
中注册 NLog.config
以及我们的程序集,其中我们有自定义的 aspnet 布局渲染器。
<extensions>
<add assembly="NLog.Web.AspNetCore" />
<add assembly="Logging.Core" />
</extensions>
HomeController 操作如下所示。我没有在控制器操作上使用任何异步,也没有启动任何子任务。只是简单的动作方法。
public ActionResult About()
{
try
{
throw new Exception("Test Exception");
}
catch(Exception ex)
{
_logger.Error(ex, "Test Exception");
return View();
}
}
在 Owin 启动类中,我配置了 NLog。
public IServiceCollection ConfigureServices(IServiceCollection services, IConfiguration config)
{
return services.AddLogging(loggingBuilder =>
{
loggingBuilder.ClearProviders();
loggingBuilder.AddNLogWeb("NLog.config");
});
}
问题
相同的自定义 AspNetLayout 渲染器是否适用于 .NET 6 和 .NET Framework 4.7.2,或者我们需要针对不同的框架实现单独的自定义布局渲染器?
我可以放置 NLog.config 但不需要,因为正在记录其余的 LogEvent 属性。只有内置在 ASPNET layoutrenderer 和我的自定义 AspNetLayout 渲染器中的 NLog 有问题吗?
基本上我在理解
HttpContextAccessor
抽象如何与这两个框架一起工作时遇到了麻烦?
谢谢!