使用 AgileConfig 动态配置 NLog
NLog 是我们在 .NET 领域使用非常广泛的日志组件。它默认使用 xml 来维护它的配置。最近有几个同学问我当使用 AgileConfig 的时候如何配置 NLog 。因为 AgileConfig 不支持集成 xml 格式的配置。其实 NLog 是支持从 appsettings.json / IConfiguration 读取配置的,那么肯定跟我们的 AgileConfig 集合是没有问题的。以下介绍下 NLog 如何跟 AgileConfig 进行集成,以及支持动态化的配置。
使用 AgileConfig 配置 NLog
NLog 默认的配置是通过 xml 来配置的。现在我们的 .NET 程序大多数都是通过 appsettings.json 来配置的。NLog 提供了从 appsettings.json / IConfiguration 读取配置的的扩展。既然支持 IConfiguration 读取那么跟我们的 AgileConfig 起来就非常简单了。
修改 program.cs
从 nuget 安装:
NLog.Extensions.Hosting
NLog.Web.AspNetCore
使用 UseAgileConfig 扩展开启 AgileConfig 支持。在 builder.Services.AddLogging 方法内手动设置 LogManager.Configuration 的值。
//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 上。
AgileConfig 的基础使用不再赘述,看以前的文章。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 成功从 AgileConfig 读取到了配置。
动态刷新 NLog 配置
上面的代码我们实现了脱离 xml 从 Agileconfig 读取配置来 NLog ,但是我们这个配置是一次性的,当我们在 AgileConfig 控制台修改配置的时候并不会更改 Nlog 的配置。这个显然不符合我们 AgileConfig 动态配置的气质。既然 NLog 不会自动监听 IConfiguration 的变化,那么我们就通过 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
AgileConfig 是一个轻量级配置中心
Github地址:https://github.com/dotnetcore/AgileConfig 开源不易,欢迎star
演示地址:http://agileconfig_server.xbaby.xyz/ 超级管理员账号:admin 密码:123456
关注我的公众号一起玩转技术

使用 AgileConfig 动态配置 NLog的更多相关文章
- Quartz 在 Spring 中如何动态配置时间--转
原文地址:http://www.iteye.com/topic/399980 在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度. 有关调度的实现我就第一就想到了Quartz这个开源 ...
- winform app.config文件的动态配置
获取 获取应用程序exe.config文件中 节点value值 /// <summary> /// 功能: 读取应用程序exe.config文件中 /// appSettings节点下 ...
- Spring动态配置多数据源
Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样可以有效提高系统的水平伸缩性.而这样的方案就会不同于常见的单一数据实例的方案,这就要程序在运行时根据当时 ...
- Struts2的处理结果(三)——动态配置结果
Struts2的处理结果(三) --动态配置结果 1.使用表达式语法 示例: <struts> <constant name="struts.enable.DynamicM ...
- 4、android xml中drawableTop(drawableBoottom、drawableLeft、drawableRight)在java代码中的动态配置
做安卓开发的朋友都知道,我们在xml中可以通过这样来对button设置其上部或者(下.左.右)的图片资源: 那么如果需要动态配置图片呢?我们不得不使用java代码来进行操作: Drawable dra ...
- Quartz动态配置表达的方法
在项目中有一个需求,需要灵活配置调度任务时间,并能自由启动或停止调度.有关调度的实现我就第一就想到了Quartz这个开源调度组件,因为很多项目使用过,Spring结合Quartz静态配置调度任务时间, ...
- IK-Analyzer(5.3.1)动态配置自定义词典
参考文献:http://blog.csdn.net/fatpanda/article/details/37911079 jar包: IK-Analyzer-extra-5.3.1.jar IKAnal ...
- activiti 动态配置 activiti 监听引擎启动和初始化(高级源码篇)
1.1.1. 前言 用户故事:现在有这样一个需求,第一个需求:公司的开发环境,测试环境以及线上环境,我们使用的数据库是不一样的,我们必须能够任意的切换数据库进行测试和发布,对数据库连接字符串我们需要加 ...
- Quartz实现分布式可动态配置的定时任务
关键词: 1. 定时任务 2. 分布式 3. 可动态配置触发时间 一般通过Quartz实现定时任务很简单.如果实现分布式定时任务需要结合分布式框架选择master节点触发也可以实现.但我们有个实际需求 ...
随机推荐
- Effective Java —— 谨慎覆盖clone
本文参考 本篇文章参考自<Effective Java>第三版第十三条"Always override toString",在<阿里巴巴Java开发手册>中 ...
- apollo规划控制视频-12basic motion planning and overview
- '\ddd'转义字符与八进制转换
所有的ASCII码都可以用"\"加数字(一般是8进制数字)来表示.而C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等, ...
- 技术架构:IT生存之道
Technical architecture: What IT does for a living (cio.com) Technical architecture: What IT does for ...
- 一套Vue的单页模板:N3-admin
趁着周末偷来一点闲,总结近期的工作和学习,想着该花点心思把N3-admin这套基于N3-components的单页应用模板简单的给介绍一下. 首发于个人博客:blog.lxstart.net项目路径: ...
- nodejs和树莓派开发以及点亮RGB的LED灯代码
前段时间集团举行前端IOT比赛,借此机会熟悉了树莓派相关的东西,特此记录一些相关的文档和开发指南. 先介绍一些树莓派的入门教程 阮一峰的树莓派入门 微雪电子-树莓派硬件中文官网 ssh链接树莓派 ss ...
- html5系列:form 2.0 新结构
以往的一个form表单,结构比较死板,所有的form元素都必须处在<form>和</form>之间才有效,这会造成一些麻烦,比如说:像bootstrap这种使用<div& ...
- Episode 3:我们想要更好的社交网络
我们为什么爱看评论?怎样的人类文字最有效率?更「好」的手机设计.APP 设计?APP Store 已经十年了?这是 WEB VIEW 的第三期节目<我们想要更好的社交网络>. 链接描述 s ...
- 前端面试题整理——VUE双向绑定原理
VUE2.0和3.0数据双向绑定的原理,并说出其区别. 代码: <!DOCTYPE html> <html lang="en"> <head> ...
- PAT B1076 Wifi密码
题目描述: 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B-2:C-3:D-4:请同 ...