以前小编记录日志使用的是Log4Net,虽然好用但和NLog比起来稍显复杂。下面小编就和大伙分享一下NLog的使用方式。
引用NLog.Config
在使用NLog之前,我们要首先添加对NLog.Config的引用,这里小编使用NuGet来添加引用,在安装NLog.Config时会同时安装NLog.Schema和NLog包。
输出日志
1 //实例化Logger对象,默认logger的名称是当前类的名称(包括类所在的命名空间名称) 2 Logger logger = LogManager.GetCurrentClassLogger(); 3 //两种记录日志的方式 4 logger.Log(LogLevel.Warn, "warning"); 5 //Info方法表示日志级别是Info 6 logger.Info(() => "record logger info");
配置NLog
只有代码是不够的,要想让代码发挥作用还要进行相关配置。我们在添加NLog.Config包后,项目中会自动添加一个名为NLog.config
的文件,针对NLog的配置就写在该文件中。
1 <targets> 2 <!--xsi:type表示日志的输出方式,File表示将日志写到文件中--> 3 <target name="logfile" xsi:type="File" fileName="日志文件全名"/> 4 <!--xsi:type="Console"表示将日志信息打印到控制台上--> 5 <target name="logConsole" xsi:type="Console"/> 6 </targets> 7 8 <rules> 9 <logger name="*" minlevel="Info" writeTo="logfile"/> 10 <!--name指的是程序代码中logger对象的名字(默认是logger对象所在的命名空间名.类名),writeTo的值是配置文件中target的名字--> 11 <logger name="Test.Program" minlevel="Debug" writeTo="logConsole"/> 12 </rules>
日志在控制台中输出效果如下:
滚动日志
当需要记录大量的日志信息时,若将日志信息都写入同一个文件中显然是不合适的,创建大量的日志文件来记录日志信息也是没有必要的。这时我们可以使用滚动日志的形式来记录日志信息。NLog中滚动日志的配置如下:
1 <target name="logfile" xsi:type="File" 2 <!--主日志文件路径,${basedir}表示项目所在目录的bin\Debug文件夹--> 3 fileName="${basedir}\Logs\log.txt" 4 <!--archiveFileName表示滚动日志存放路径,log.{#####}.txt是滚动日志文件名--> 5 archiveFileName="${basedir}\Archives\log.{#####}.txt" 6 <!--每个日志文件大小的最大值(单位:字节),主日志文件超过大小超过该值时会将文件内容写入滚动日志并清空主日志文件内容--> 7 archiveAboveSize="1024" 8 archiveNumbering="Rolling" 9 concurrentWrites="true" 10 <!--滚动日志文件上限数,滚动日志文件数达到上限新的文件内容会覆盖旧文件内容 --> 11 maxArchiveFiles="2" 12 keepFileOpen="false" />
存放日志目录结构如下:
Archives文件夹中的滚动日志:
滚动日志的更过配置方法可参考文章File target。
日志文件格式配置
从图片中我们可以看到,默认的日志输出格式是: 时间|日志级别|Logger对象名|日志内容
我们可以使用target标签的layout属性来自定义日志输出格式,如
<target name="logfile" xsi:type="File" fileName="file.txt" layout="${date:format=yyyyMMddHHmmss} ${message}" />
使用自定义格式输出日志内容效果如下:
另一种方式:
<target xsi:type="File" name="globalErrorLog" fileName="${basedir}\App_Data\Logs\log.txt" layout="${longdate}${newline}${message}${exception}${newline}----------${level} | ${logger}----------${newline}" />
日志输出格式如下:
结语
日志可以帮助我们更好的调试程序,当系统出现问题时,我们可以通过日志来快速的定位到问题所在,因此在开发中日志的记录十分重要。这里小编仅仅总结了使用NLog记录日志的简单用法,至于NLog的更多使用方式有兴趣的读者可以查看NLog官网的相关文档。
参考文章:
Tutorial
Custom target
Configuration API
Configuration file
File target
Layout Renderers
FileTarget Header and Footer