NLog 从文件和代码加载配置
NLog load configuration from both file and code
我正在使用 NLog 4.7.2。我想从代码配置它。但是,我想保留修改日志记录配置的可能性,而不必重新启动我的应用程序。我知道我可以自己滚动一些东西(例如,UI 上的一个开关会修改适当的规则并调用 LogManager.ReconfigExistingLoggers()
),但我想利用 [=] 的现有功能16=] 配置文件 autoreload.
我的目的是在代码中进行默认配置,然后如果弹出某些内容并且我需要提高日志记录级别,我会修改 XML 配置文件而不重新启动应用程序。
如果像这样使用 NLog.config
:
<nlog autoreload="true">
<variable name="minlevel" value="Warn" />
</nlog>
然后像这样执行 LoggingConfiguration 的初始设置:
SetupNLogConfig();
LogManager.ConfigurationReloaded += (sender, args) => {
SetupNLogConfig();
}
并像这样设置 SetupNLogConfig:
void SetupNLogConfig()
{
var config = LogManager.Configuration ?? new NLog.Config.LoggingConfiguration();
Layout minLevel = config.Variables["minlevel"] ?? "Warn";
string minLevelString = minLevel.Render(LogEventInfo.CreateNullEvent());
LogLevel minLevelValue = LogLevel.FromString(minLevelString);
// Targets where to log to: File and Console
var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "file.txt" };
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
// Rules for mapping loggers to targets
config.AddRule(minLevelValue, LogLevel.Fatal, logconsole);
config.AddRule(minLevelValue, LogLevel.Fatal, logfile);
// Re-Apply config
NLog.LogManager.Configuration = config;
}
然后您可以修改 NLog.config
中的 minlevel
变量,它应该使用更新后的值重新配置。
我正在使用 NLog 4.7.2。我想从代码配置它。但是,我想保留修改日志记录配置的可能性,而不必重新启动我的应用程序。我知道我可以自己滚动一些东西(例如,UI 上的一个开关会修改适当的规则并调用 LogManager.ReconfigExistingLoggers()
),但我想利用 [=] 的现有功能16=] 配置文件 autoreload.
我的目的是在代码中进行默认配置,然后如果弹出某些内容并且我需要提高日志记录级别,我会修改 XML 配置文件而不重新启动应用程序。
如果像这样使用 NLog.config
:
<nlog autoreload="true">
<variable name="minlevel" value="Warn" />
</nlog>
然后像这样执行 LoggingConfiguration 的初始设置:
SetupNLogConfig();
LogManager.ConfigurationReloaded += (sender, args) => {
SetupNLogConfig();
}
并像这样设置 SetupNLogConfig:
void SetupNLogConfig()
{
var config = LogManager.Configuration ?? new NLog.Config.LoggingConfiguration();
Layout minLevel = config.Variables["minlevel"] ?? "Warn";
string minLevelString = minLevel.Render(LogEventInfo.CreateNullEvent());
LogLevel minLevelValue = LogLevel.FromString(minLevelString);
// Targets where to log to: File and Console
var logfile = new NLog.Targets.FileTarget("logfile") { FileName = "file.txt" };
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
// Rules for mapping loggers to targets
config.AddRule(minLevelValue, LogLevel.Fatal, logconsole);
config.AddRule(minLevelValue, LogLevel.Fatal, logfile);
// Re-Apply config
NLog.LogManager.Configuration = config;
}
然后您可以修改 NLog.config
中的 minlevel
变量,它应该使用更新后的值重新配置。