为什么日志级别没有改变?
Why isn't log level changing?
我正在尝试添加一个允许用户更改日志记录级别的功能。我是 .NET 4.5.2 上的 运行 NLog 4.7.11。从这里开始是我的 nlog 配置:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
internalLogFile="E:\nlog-internal.txt">
<extensions>
<add assembly="NLog.Windows.Forms"/>
</extensions>
<targets>
<target name="logfile" xsi:type="File" fileName="program.log" layout="${longdate} | ${level:uppercase=true} | ${message} | ${exception}" />
<target name="logconsole" xsi:type="Console" />
<target xsi:type="RichTextBox"
name="logwindow"
layout="${longdate} | ${level:uppercase=true} | ${message} | ${exception}"
autoScroll="true"
maxLines="500"
controlName="logTextBox"
formName="LogWindow"
useDefaultRowColoringRules="true"
allowAccessoryFormCreation="false"
messageRetention="All"
supportLinks="false">
</target>
</targets>
<rules>
<logger name="*" minlevel="Warn" writeTo="logconsole" />
<logger name="*" minlevel="Warn" writeTo="logwindow" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
我认为 SetLoggingLevels
方法会使这项任务变得相当简单:
private void logLevelMenuStripItem_Click(object sender, EventArgs e)
{
logLevelTraceMenuStripItem.Checked = false;
logLevelInfoMenuStripItem.Checked = false;
logLevelDebugMenuStripItem.Checked = false;
logLevelWarnMenuStripItem.Checked = false;
logLevelErrorMenuStripItem.Checked = false;
ToolStripMenuItem source = sender as ToolStripMenuItem;
source.Checked = true;
LogLevel newLevel = LogLevel.FromString(source.Text);
foreach (NLog.Config.LoggingRule rule in LogManager.Configuration.LoggingRules)
{
rule.SetLoggingLevels(newLevel, LogLevel.Fatal);
}
}
无论我用这个设置哪个值,都会遵循我的 nlog.config 中的规则。是否有我需要允许编程重新配置或其他我没有考虑过的设置,或者我是否遇到了错误?
更改配置时,需要应用通知NLog。
例如
var config = LogManager.Configuration;
foreach (NLog.Config.LoggingRule rule in config.LoggingRules)
{
rule.SetLoggingLevels(newLevel, LogLevel.Fatal);
}
// Apply
LogManager.Configuration = config;
见https://github.com/NLog/NLog/wiki/Configure-from-code
有任何更好的(阅读更多线程安全的)方法来更改配置运行时。参见 https://github.com/NLog/NLog/wiki/Configure-from-code#update-config-in-code
我正在尝试添加一个允许用户更改日志记录级别的功能。我是 .NET 4.5.2 上的 运行 NLog 4.7.11。从这里开始是我的 nlog 配置:
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
internalLogFile="E:\nlog-internal.txt">
<extensions>
<add assembly="NLog.Windows.Forms"/>
</extensions>
<targets>
<target name="logfile" xsi:type="File" fileName="program.log" layout="${longdate} | ${level:uppercase=true} | ${message} | ${exception}" />
<target name="logconsole" xsi:type="Console" />
<target xsi:type="RichTextBox"
name="logwindow"
layout="${longdate} | ${level:uppercase=true} | ${message} | ${exception}"
autoScroll="true"
maxLines="500"
controlName="logTextBox"
formName="LogWindow"
useDefaultRowColoringRules="true"
allowAccessoryFormCreation="false"
messageRetention="All"
supportLinks="false">
</target>
</targets>
<rules>
<logger name="*" minlevel="Warn" writeTo="logconsole" />
<logger name="*" minlevel="Warn" writeTo="logwindow" />
<logger name="*" minlevel="Debug" writeTo="logfile" />
</rules>
</nlog>
我认为 SetLoggingLevels
方法会使这项任务变得相当简单:
private void logLevelMenuStripItem_Click(object sender, EventArgs e)
{
logLevelTraceMenuStripItem.Checked = false;
logLevelInfoMenuStripItem.Checked = false;
logLevelDebugMenuStripItem.Checked = false;
logLevelWarnMenuStripItem.Checked = false;
logLevelErrorMenuStripItem.Checked = false;
ToolStripMenuItem source = sender as ToolStripMenuItem;
source.Checked = true;
LogLevel newLevel = LogLevel.FromString(source.Text);
foreach (NLog.Config.LoggingRule rule in LogManager.Configuration.LoggingRules)
{
rule.SetLoggingLevels(newLevel, LogLevel.Fatal);
}
}
无论我用这个设置哪个值,都会遵循我的 nlog.config 中的规则。是否有我需要允许编程重新配置或其他我没有考虑过的设置,或者我是否遇到了错误?
更改配置时,需要应用通知NLog。
例如
var config = LogManager.Configuration;
foreach (NLog.Config.LoggingRule rule in config.LoggingRules)
{
rule.SetLoggingLevels(newLevel, LogLevel.Fatal);
}
// Apply
LogManager.Configuration = config;
见https://github.com/NLog/NLog/wiki/Configure-from-code
有任何更好的(阅读更多线程安全的)方法来更改配置运行时。参见 https://github.com/NLog/NLog/wiki/Configure-from-code#update-config-in-code