从数据库而不是配置文件中读取 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
是否可以从数据库中读取 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