c# - appsetting.json 重新加载后如何重新加载 Logger?

我正在尝试从 appsetting.json 控制日志中的 LogLevel。我在这里添加了我的 Nlog 配置和自定义字段 LogLevel。在规则中,我添加了 "${configsetting:item=LogLevel}" 并且它有效。但我希望能够在应用程序运行时更改 LogLevel。所以我将 autoReload 添加到 json 并将 reloadOnChange = true 添加到 ConfigurationBuilder。但它不适用于 NLog。

appsetting.json 中的一些:

"LogLevel": "Info",
  "NLog": {
    "throwConfigExceptions": true,
    "autoReload": true,
    "internalLogToConsole": true,
    "extensions": [
      { "assembly": "SumoLogic.Logging.NLog" }
    ],
    "targets": {
      "async": true,
      "fileTarget": {
        "type": "File",
        "fileName": "${gdc:item=mainLogFileName}",
        "layout":"${longdate}|${level:uppercase=true}|${logger}|${message:exceptionSeparator=\r\n:withException=true}"
      },
      "errorFileTarget": {
        "type": "File",
        "fileName": "${gdc:item=errorLogFileName}",
        "layout":"${longdate}|${level:uppercase=true}|${logger}|${message:exceptionSeparator=\r\n:withException=true}"
      },
      "consoleTarget": {
        "type": "Console",
        "layout":"${message:exceptionSeparator=\r\n:withException=true}"
      }
    },
    "rules": [
      {
        "logger": "*",
        "minLevel": "${configsetting:item=LogLevel}",
        "writeTo": "consoleTarget"
      },
      {
        "logger": "*",
        "minLevel": "${configsetting:item=LogLevel}",
        "writeTo": "fileTarget"
      },
      {
        "logger": "*",
        "minLevel": "Error",
        "writeTo": "errorFileTarget"
      },   
    ]
  }

我的代码是

var config = new ConfigurationBuilder()
    .AddJsonFile("appsettings.json", false, true)
    .AddCommandLine(args)
    .AddEnvironmentVariables()
    .AddUserSecrets(Assembly.GetExecutingAssembly())
    .Build();

ConfigSettingLayoutRenderer.DefaultConfiguration = config;
LogManager.Configuration = new NLogLoggingConfiguration(config.GetSection("NLog"));

LogManager.ReconfigExistingLoggers();

它对我有用的唯一方法:

_logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
                
ConfigSettingLayoutRenderer.DefaultConfiguration = _config;
                
LogManager.Configuration = new NLogLoggingConfiguration(_config.GetSection("NLog"));

LogManager.ReconfigExistingLoggers();

但这意味着将其写在每个日志下。

有什么好方法可以用 appsetting 重新加载 NLog 吗?

回答1

确保更新已随您的应用程序“部署”的 appsettings.json 文件。前任。在 Debug- 或 Release- 输出文件夹中。

Microsoft 扩展日志不会对更新 Visual Studio 解决方案文件夹中的 appsettings.json 做出反应。

相似文章

最新文章