【问题标题】:Read NLog configuration from database instead of config file从数据库而不是配置文件中读取 NLog 配置
【发布时间】:2021-09-30 14:31:52
【问题描述】:

是否可以从数据库中读取 NLog .NET 配置? 我需要快速改变目标规则的严重性,所以我想知道是否有办法做到这一点。 例如,如果在配置文件中我有这个:

<rules>
  <logger name="*" minlevel="Warning" writeTo="LogToDB" />
  <logger name="*" minlevel="Info" writeTo="LogToConsole" />
</rules>

我希望能够快速更改 minlevel="value" 值(即来自数据库配置表),而无需部署应用程序配置文件。

非常感谢。

【问题讨论】:

    标签: .net configuration nlog


    【解决方案1】:

    您可以使用NLog 提供的APIs 在运行时重新配置日志记录。 使用以下函数重新配置日志记录 -

    public void ReconfigureLoggingLevel()
    {
        foreach (var rule in NLog.LogManager.Configuration.LoggingRules)
        {
            var logLevel = GetLogLevelFromDatabase(); // your logic to fetch log level
            rule.EnableLoggingForLevel(NLog.LogLevel.FromString(logLevel));
        }
        NLog.LogManager.ReconfigExistingLoggers();
    }
    

    【讨论】:

      【解决方案2】:

      你也可以这样做:

      <variable name="MinLevelDB" value="Warning" />
      <variable name="MinLevelConsole" value="Info" />
      
      <rules>
        <logger name="*" minlevel="${var:MinLevelDB}" writeTo="LogToDB" />
        <logger name="*" minlevel="${var:MinLevelConsole}" writeTo="LogToConsole" />
      </rules>
      

      然后你可以这样做:

      LogManager.Configuration.Variables["MinLevelDB"] = "Debug";
      LogManager.ReconfigExistingLoggers();
      

      另请参阅:https://github.com/NLog/NLog/wiki/Filtering-log-messages#semi-dynamic-routing-rules

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-12
        • 1970-01-01
        相关资源
        最近更新 更多