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



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

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

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

谢谢你。

您可以在运行时使用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

参见:https://github.com/NLog/NLog/wiki/Environment-specific-NLog-Logging-Configuration

最新更新