NLog 使用 AgileConfig 动态配置

科技资讯 投稿 52500 0 评论

NLog 使用 AgileConfig 动态配置

使用 AgileConfig 配置 NLog

NLog 默认的配置是通过 xml 来配置的。现在我们的 .NET 程序大多数都是通过 appsettings.json 来配置的。NLog 提供了从 appsettings.json / IConfiguration 读取配置的的扩展。既然支持 IConfiguration 读取那么跟我们的 AgileConfig 起来就非常简单了。

修改 program.cs

NLog.Extensions.Hosting
NLog.Web.AspNetCore

使用  扩展开启 AgileConfig 支持。在  方法内手动设置  的值。

//use agileconfig client
builder.Host.UseAgileConfig(;

//add nlog porvider
builder.Services.AddLogging(b => {
    b.ClearProviders(;
     IConfiguration config = builder.Configuration;
    NLog.LogManager.Configuration = new NLogLoggingConfiguration(config.GetSection("NLog";
    b.AddNLogWeb(;
};

在 AgileConfig 维护配置

修改好代码后,我们需要把 json 配置文件维护到 AgileConfig 上。

  • 新建应用 Nlog_test

  • 在 AgileConfig 控制台新建一个应用 Nlog_test 。

  • 维护 Nlog 配置

  • 把以下 json 配置维护到 Nlog_test 应用下。

{
  "NLog": {
    "rules": [
      {
        "logger": "*",
        "minLevel": "Trace",
        "writeTo": "logfile2"
      }
    ],
    "targets": {
      "async": "True",
      "logconsole": {
        "type": "Console"
      },
      "logfile1": {
        "fileName": "d:/nlogs/nlog-${shortdate}.log",
        "type": "File"
      },
      "logfile2": {
        "fileName": "d:/nlogs/nlog-${shortdate}-file2.log",
        "type": "File"
      }
    },
    "throwConfigExceptions": "True"
  }
}

复制以上 json 文件粘贴到 “编辑 JSON” 文本框:

  • 发布配置


  • 点击发布按钮,上线 Nlog 配置。


动态刷新 NLog 配置

上面的代码我们实现了脱离 xml 从 Agileconfig 读取配置来 NLog,但是我们这个配置是一次性的,当我们在 AgileConfig 控制台修改配置的时候并不会更改 Nlog 的配置。这个显然不符合我们 AgileConfig 动态配置的气质。既然 NLog 不会自动监听  的变化,那么我们就通过 AgileConfig 的配置变化事件来手动 reload NLog 的配置吧。

void loadNlogConfig(
{
    IConfiguration config = builder.Configuration;
    NLog.LogManager.Configuration = new NLogLoggingConfiguration(config.GetSection("NLog";
    NLog.LogManager.Configuration.Reload(;
}

//use agileconfig client
builder.Host.UseAgileConfig((ConfigChangedArg e => {
    loadNlogConfig(;
};

//add nlog porvider
builder.Services.AddLogging(b => {
    b.ClearProviders(;
    NLog.LogManager.ConfigurationChanged += (_, _ => NLog.LogManager.ReconfigExistingLoggers(;
    loadNlogConfig(;
    b.AddNLogWeb(;
};

通过以上配置,当我们在 AgileConfig 修改 Nlog 配置规则的时候,只要点击发布,应用的 Nlog 配置就会实时更改。

AgileConfig

Github地址:https://github.com/dotnetcore/AgileConfig  开源不易,欢迎star

编程笔记 » NLog 使用 AgileConfig 动态配置

赞同 (29) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽