我有一个winForm应用程序。我正在使用NLog进行日志记录。我的配置文件如下。我可以在运行时用户定义此配置文件中的任何参数。例如,对于archiveAboveSize="4000"
,我可以在winform中进行数值减少,可以从用户输入此值(以便4000可以是3000或5000),然后相应地在配置文件中设置此值吗?
<?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">
<targets>
<target xsi:type="File"
name="file"
layout="${longdate}|${level:uppercase=true}|${logger}|${message}"
archiveAboveSize="4000"
maxArchiveFiles="1"
archiveFileName="${basedir}/log_archived.txt"
fileName="log.txt" />
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="file" />
</rules>
</nlog>
答案 0 :(得分:4)
您可以从NLog配置中按名称获取目标,并在运行时更改设置:
var target = (FileTarget)LogManager.Configuration.FindTargetByName("file");
if (target != null)
target.ArchiveAboveSize = 3000;
不幸的是,您无法以这种方式更新NLog配置文件 - 您应该手动执行此操作。您可以使用LINQ:
var nlogConfigFile = "NLog.config";
var xdoc = XDocument.Load(nlogConfigFile);
var ns = xdoc.Root.GetDefaultNamespace();
var fileTarget = xdoc.Descendants(ns + "target")
.FirstOrDefault(t => (string)t.Attribute("name") == "file");
fileTarget.Attribute("archiveAboveSize").SetValue(3000);
xdoc.Save(nlogConfigFile);