Nlog - 数据库目标延迟

Nlog - database target delay

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

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

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

"solution" 是执行早期加载并设置 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