目录
一、背景
二、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");