从数据库而不是配置文件中读取 NLog 配置

Read NLog configuration from database instead of config file

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

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

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

非常感谢。

您可以使用 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();
}

您也可以这样做:

<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