c# – 在运行时使NLog配置文件用户定义

我有一个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>

解决方法:

您可以从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);
上一篇:c# – NLog xsi:键入不使用自定义目标


下一篇:CorelDRAW x4去弹窗警告提示窗口解决教程分享