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

时间:2013-11-26 14:31:14

标签: c# logging 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>

1 个答案:

答案 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);