【发布时间】:2021-11-10 19:43:02
【问题描述】:
我正在尝试添加一个功能以允许用户更改日志记录级别。我在 .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 中的规则。是否需要允许以编程方式重新配置的设置或其他我没有考虑过的设置,或者我遇到了错误?
【问题讨论】: