如何强制重新加载NLog配置文件?

2023-11-22

我正在将 NLog 与配置文件一起使用。 为了避免在一些长时间的治疗中记录太多的东西,我正在做这样的事情:

 foreach (LoggingRule rule in LogManager.Configuration.LoggingRules) 
 {
      rule.DisableLoggingForLevel(LogLevel.Trace);   
      rule.DisableLoggingForLevel(LogLevel.Debug);   
 }
 LogManager.ReconfigExistingLoggers();

它允许我暂时降低日志记录的详细级别。上面几行只是为了说明的示例。 这似乎工作得很好。

之后,我想恢复我的“常规”日志配置,只需通过重新加载我的 NLog.Config 文件它已经在程序启动时自动加载。 我试过了 :

LogManager.Configuration.Reload();
LogManager.ReconfigExistingLoggers();

我认为这很容易,但配置。重新加载并没有达到我的预期,而且我没有找到任何其他合适的方法。 调用后,我的记录器在程序启动时仍然不存储跟踪和调试事件。

所以我的问题是:如何以编程方式强制在运行时重新加载 NLog.config 并恢复我的“标准”记录器设置?

Thanks

问题更新并提供更多详细信息:

我正在使用 VS2013、.Net 4 projet 和 NLog 4.4.0-beta11(测试版,但最后在 nuget 上),配置文件中定义的简单“文件”目标,其中 minLevel = Trace 和 autoReload=True

在类级别实例化记录器: 私有静态只读 Logger Logger = LogManager.GetCurrentClassLogger();

这是我的测试证据:

    Assert.True(Logger.IsTraceEnabled);
    Assert.True(Logger.IsDebugEnabled);

    Logger.Trace("1 - This should appear in log");
    Logger.Debug("2 - This should appear in log");

    foreach (LoggingRule rule in LogManager.Configuration.LoggingRules)
    {
        rule.DisableLoggingForLevel(LogLevel.Trace);
        rule.DisableLoggingForLevel(LogLevel.Debug);
    }
    LogManager.ReconfigExistingLoggers();

    Logger.Trace("3 - This should NOT appear in log");
    Logger.Debug("4 - This should NOT appear in log");
    Logger.Info("5 - This should appear in log");

    Assert.False(Logger.IsDebugEnabled);
    Assert.False(Logger.IsTraceEnabled);

    LogManager.Configuration.Reload();
    LogManager.ReconfigExistingLoggers();

    // This is were something goes wrong

    Logger.Trace("6 - This should appear in log"); // DOES NOTHING
    Logger.Debug("7 - This should appear in log"); // DOES NOTHING
    Logger.Info("8 - This should appear in log");

    Assert.True(Logger.IsDebugEnabled); // FAILS
    Assert.True(Logger.IsTraceEnabled); // FAILS

生成的日志:

    TRACE 1 - This should appear in log         
    DEBUG 2 - This should appear in log
    INFO 5 - This should appear in log
    INFO 8 - This should appear in log

在 nlog 内部日志中,我可以看到配置似乎已重新加载,没有任何问题(文件很长,所以我不会将其发布在这里,除非有人问),但也许现有的记录器没有更新?

使用上面的代码,您应该很容易尝试。如果我做错了什么或者是 NLog 配置管理中的错误,请告诉我。


实际上,您的代码中有一个错误: LogManager.Configuration.Reload() 不会更改记录器的配置,而是从 NLog.config 文件加载配置,反序列化它并返回 LoggingConfiguration 作为结果。

要恢复配置,您需要执行以下操作:

LogManager.Configuration = LogManager.Configuration.Reload();
LogManager.ReconfigExistingLoggers();

这是一个测试示例(示例配置中的 minLevel =“DEBUG”):

[TestMethod]
        public void Test()
        {
            Logger.Trace("TRACE 1");
            Logger.Debug("DEBUG 1");
            Logger.Warn("WARN 1");

            foreach (LoggingRule rule in LogManager.Configuration.LoggingRules)
            {
                rule.DisableLoggingForLevel(LogLevel.Trace);
                rule.DisableLoggingForLevel(LogLevel.Debug);
            }
            LogManager.ReconfigExistingLoggers();

            Logger.Trace("TRACE 2");
            Logger.Debug("DEBUG 2");
            Logger.Warn("WARN 2");

            // Reconfigure();
            LogManager.Configuration = LogManager.Configuration.Reload();
            LogManager.ReconfigExistingLoggers();

            Logger.Trace("TRACE 3");
            Logger.Debug("DEBUG 3");
            Logger.Warn("WARN 3");
        }

output:

(DEBUG): DEBUG 1
(WARN): WARN 1
// here settings changed
(WARN): WARN 2
//here settings reloaded
(DEBUG): DEBUG 3
(WARN): WARN 3
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何强制重新加载NLog配置文件? 的相关文章

  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 如何使用 ICU 解析汉字数字字符?

    我正在编写一个使用 ICU 来解析由汉字数字字符组成的 Unicode 字符串的函数 并希望返回该字符串的整数值 五 gt 5 三十一 gt 31 五千九百七十二 gt 5972 我将区域设置设置为 Locale getJapan 并使用
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • while 循环中的 scanf

    在这段代码中 scanf只工作一次 我究竟做错了什么 include
  • SolrNet连接说明

    为什么 SolrNet 连接的容器保持静态 这是一个非常大的错误 因为当我们在应用程序中向应用程序发送异步请求时 SolrNet 会表现异常 在 SolrNet 中如何避免这个问题 class P static void M string
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 将控制台重定向到 .NET 程序中的字符串

    如何重定向写入控制台的任何内容以写入字符串 对于您自己的流程 Console SetOut http msdn microsoft com en us library system console setout aspx并将其重定向到构建在
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • Flask 会话如何工作?

    我很好奇 Flask 会话是如何工作的 特别是它如何在服务器重新启动之间存储信息 如果我错了 请引用我的话 我知道你必须设置一个独特的app secret key因此人们无法以任何方式解密会话并修改 cookie 因为会话的 cookie
  • 将数组中的空值替换为零值

    我有一个数组 我需要删除空值并将其替换为零 我已经取得了这么多成就 当我检查数组长度为 8 但它只显示 2 个元素时 用零替换它的最佳方法是什么 var a a 3 5 a 5 15 console log a length 6 conso
  • 获取相关实体 ASP.NET WebApi OData v4 导致“未找到与请求 URI 匹配的 HTTP 资源”

    我跟着Mike Wasson 的这个 ASP NET 教程 并设法很好地设置了相关实体 但是当我将此逻辑应用于我的项目时 更复杂的实体关系 因为实体关系更多 这是唯一的区别 在 OData 调用中不会成功 我收到带有此有效负载的 404 e
  • 找不到模块 FBSDKCoreKit Cocoapods

    我正在尝试使用 CocoaPods 使用 use frameworks 将 facebook 集成到我的应用程序中 标签 并根据 Facebook 的此处说明 还包括吊舱螺栓 当我尝试使用时import FBSDKCoreKit在我的 ap
  • 代理与自然/业务密钥[关闭]

    Closed 这个问题是基于意见的 目前不接受答案 又来了 老争论依然出现 我们是否最好将业务键作为主键 或者我们宁愿使用对业务键字段具有唯一约束的代理 ID 即 SQL Server 标识 请提供例子或证据来支持你的理论 使用代理键的几个
  • 按连接值对 R 数据帧进行分组

    我没有找到 R 中这个常见分组问题的解决方案 这是我的原始数据集 ID State 1 A 2 A 3 B 4 B 5 B 6 A 7 A 8 A 9 C 10 C 这应该是我分组的结果数据集 State min ID max ID A 1
  • SVN 术语 - 签出、工作副本、属性、存储库

    当我尝试学习如何使用时svn externals 我很难理解这些术语的差异 它们有何不同 工作副本 and checkout 有时构建是有用的工作副本这是由许多不同的结账 source property 在 Subversion 中 您可以
  • 哪个性能更好: test != null 或 null != test [重复]

    这个问题在这里已经有答案了 考虑以下两行代码 if test null and if null test 从性能角度来看 上述两种说法有什么区别吗 我见过很多人使用后者 当被问及时 他们说这是最佳实践 但没有充分的理由 没有不同 第二个原因
  • 导入web3到next js会报错

    我正在使用 next js 和 Material ui 构建一个用于学习的演示 dapp 我已经安装了元掩码 到目前为止我只能设置一个 连接到钱包 按钮 我陷入了必须导入 Web3 构造函数的困境 我的代码如下所示 我的包 json 的屏幕
  • 如何删除文件最后一行的最后一个字符? [复制]

    这个问题在这里已经有答案了 我在一个文件中有这组行 info info info info 我想要这样的文件 没有最后一个 info info info info 我怎样才能在 bash 中做到这一点 任何想法 您可以使用sed sed s
  • 确保控制器在 Unity 中具有无参数公共构造函数

    我在控制器上遇到了这个问题 尝试创建类型为 的控制器时发生错误 WebMvc Controllers HomeController 确保控制器具有无参数公共构造函数 找到了ApiController的解决方案 但是没有找到关于普通Contr
  • $this->render 和 $this->redirect Symfony2 之间的区别

    this gt render 和 this gt redirect 之间有什么区别 有没有一种方法可以像我使用 this gt redirect 那样使用 this gt render 传递参数 return this gt render
  • jQuery:如何确定单击了哪个
  • 标签?
  • 我正在创建一个包含 5 行文本的表单 每个文本都允许用户选择是否希望文本居中 左对齐或右对齐 我有一个未编号的列表 其中列表元素为 x5 li img src images justify left png alt left span Ju
  • AWS - 通过 EBS 实现跨可用区冗余的任何方法

    我正在寻找 EBS 的冗余解决方案 理想情况下 我们会在每个可用区都有一个 EBS 卷 类似于主从配置 当主 EBS 卷发生故障时 所有读 写操作都将定向到辅助卷 该卷用于存储应用程序的用户数据 而不是操作系统或应用程序文件或类似的内容 将
  • 如何使用 Get-ChildItem -exclude 排除多个文件夹?

    我需要为我们的 Pro Engineer CAD 系统生成一个配置文件 我需要我们服务器上特定驱动器的文件夹的递归列表 但是 我需要排除其中包含 ARCHIVE 的任何文件夹 包括各种不同的情况 我写了以下内容 除了不排除文件夹外 它可以工
  • Android Alarm AlarmManager 提供的四种 Alarm 有什么区别以及何时使用什么?

    我想知道之间的区别RTC RTC WAKEUP ELAPSED REALTIME ELAPSED REALTIME WAKEUP 我想编写一个闹钟应用程序 我将在其中设置闹钟并关闭我的应用程序 并期望在设置的时间发出闹钟 会有多个警报 现在
  • 如何在 ASP.Net 应用程序中设置默认时区

    您好 我创建了 ASP NET Web 应用程序 没有考虑时区 我直接使用 DateTime Now 函数 实际上 这会以服务器配置的时区格式返回日期时间 现在我无法更改整个应用程序 那么有什么方法可以将应用程序的时区设置为独立于托管该应用
  • 为什么在这里使用 static_cast 而不是 reinterpret_cast 很重要?

    回复 Raymond Chen 博文 有提问者指出 Raymond 我相信 C 示例是不正确的 因为这个位置 派生类中的基类子对象的属性未指定 根据 ISO C 2003 标准 10 3 第 168 页 并且您假设 基类子对象始终位于开头
  • LDAP 嵌套组成员资格

    是否可以创建一个 LDAP 查询来返回 或检查 嵌套组中的用户 例如UserA是GroupA的成员 GroupA是GroupB的成员 我想要对 GroupB 进行查询以返回 UserA 是成员 仅限 LDAP 服务器是活动目录 是 使用 L
  • 如何强制重新加载NLog配置文件?

    我正在将 NLog 与配置文件一起使用 为了避免在一些长时间的治疗中记录太多的东西 我正在做这样的事情 foreach LoggingRule rule in LogManager Configuration LoggingRules ru