首页 > 解决方案 > Nlog - 数据库目标延迟

问题描述

我已将 nlog 配置为将日志写入数据库,使用配置布局抽屉从 appsettings.json 为连接字符串提供主机。但是在 Startup.ConfigureServices 和 Startup.Configure 中有一些日志调用。因此,当配置尚未准备好时,此时 nlog 会尝试写入数据库。它需要空主机(配置仍未准备好!),并且在 nlog 自己的日志文件中,我看到由于空主机而导致日志记录失败的错误。

所以,问题是:在配置准备好之前不登录到数据库目标的方法吗?

标签: asp.net-coreloggingnlogasp.net-core-3.0

解决方案


我猜问题是您在加载 MEL 配置之前开始使用 NLog。

“解决方案”是执行早期加载并设置 appsettings.json:

var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath)
    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
    .AddEnvironmentVariables();

Configuration = builder.Build();

ConfigSettingLayoutRenderer.DefaultConfiguration = Configuration;

// Loads NLog.config one more time
var logger = NLog.Web.NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();

另见:https ://github.com/NLog/NLog.Extensions.Logging/issues/265

NLog 4.7.1 和 NLog.Web.AspNetCore 版本。4.9.3 将可以做到这一点:

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

另见:https ://github.com/NLog/NLog.Web/pull/540


推荐阅读