目录
一、背景
二、NLog配置文件
三、C#代码
四、验证结果
五、总结
一、背景
最近项目中要用到NLog记录日志,有一个要求是可以灵活地修改日志文件的存放位置,琢磨了一小会,发现可以使用XML文件的形式修改文件的参数,现将方法逐一讲解。
二、NLog配置文件
NLog配置文件(即名为NLog.config的文件)的内容如下面所示,要将日志文件的存放由D:/Data/logs/All/改为E:/Data/logs/All,对应变量的名称是logDirectory。(代码直接复制下来就可以用)
<?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"
autoReload="true" throwExceptions="false" internalLogLevel="Off">
<!--定义变量logDirectory,变量的值可以通过${varname}语法插入到属性值中。一个变量值甚至可以用来定义另一个变量的值。-->
<variable name="logDirectory" value="D:/Data/logs/All/"/>
<!--定义日志目标/输出-->
<targets async="true" keepFileOpen="false">
<!-- to limit per file max size: archiveAboveSize="5000000"-->
<default-target-parameters xsi:type="File" layout="${longdate}|${level:uppercase=true}|${logger}|${threadid}|${message}|${exception:format=tostring}" encoding="utf-8" />
<!--name表示目标的名称,xsi:type表示日志的输出类型,fileName表示日志文件的路径-->
<target name="MinTarget" xsi:type="File" fileName="${logDirectory}/${date:format=yyyyMMdd}.txt" />
</targets>
<rules>
<!--*表示所有日志记录器,minlevel表示输出日志的最低级别,maxlevel表示输出日志的最大级别,writeTo表示输出日志到指定的目标-->
<logger name="*" minlevel="Debug" maxlevel="Fatal" writeTo="MinTarget" />
</rules>
</nlog>
三、C#代码
关键代码如下面所示,先将NLog配置文件当作XML文件加载进来,然后修改日志文件的存放位置,之后保存配置文件,最后生效NLog的配置参数。(代码直接复制下来就可以用)
Logger logger=LogManager.GetCurrentClassLogger();
logger.Info("未修改日志文件路径前");
//NLog配置文件
string fileName = "NLog.config";
XmlDocument document = new XmlDocument();
document.Load(fileName);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);
//给命名空间定义别名
nsmgr.AddNamespace("n", "http://www.nlog-project.org/schemas/NLog.xsd");
//使用XPath语法查找指定元素
XmlNode node = document.SelectSingleNode("//n:variable[@name='logDirectory']", nsmgr);
//修改日志文件的存放位置
node.Attributes["value"].Value = @"E:/Data/logs/All";
//保存xml文档
document.Save(fileName);
//生效Nlog配置参数
LogManager.Configuration = new XmlLoggingConfiguration("NLog.config");
//记录日志
logger.Debug("This is a debug message.");
logger.Info("This is an info message.");
logger.Warn("This is a warning message.");
logger.Error("This is an error message.");
四、验证结果
未修改日志存放位置前,日志往往会保存到D:/Data/logs/All/这个目录下,验证OK。
修改日志存放位置后,日志即刻保存到 E:/Data/logs/All这个目录下,验证OK。
五、总结
通过XML文件的形式可以修改配置文件的参数,文件内的其他参数都可以使用这种方法进行修改,配置文件修改完成后将文件保存并更新配置才能生效。
//保存xml文档
document.Save(fileName);
//生效Nlog配置参数
LogManager.Configuration = new XmlLoggingConfiguration("NLog.config");