.NET中使用NLog记录日志

以前小编记录日志使用的是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

版权声明

本文为作者原创,版权归作者雪飞鸿所有。 转载必须保留文章的完整性,且在页面明显位置处标明原文链接

如有问题, 请发送邮件和作者联系。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏MelonTeam专栏

Android资源热修复之修改aapt源码

导语 在Windows下定制自己的aapt! 一、环境配置 1.1 软件和源码 Codeblocks下载地址:< mingw64下载地址:<ht...

3205
来自专栏林德熙的博客

从以前的项目格式迁移到 VS2017 新项目格式 必须删除必须修改添加文件项目引用引用包删除多余文件输入注释多个框架使用条件判断迁移 WPF 项目

以前的项目格式使用的是 csproj 的格式,但是 .net core 支持使用 project.json 格式的项目文件,后来还是决定不使用这个格式。 VS2...

6812
来自专栏葡萄城控件技术团队

Spread for Windows Forms快速入门(14)---文件操作

你可以将数据从Spread中存到几种不同类型的文件中或者可以在Spread中打开几种不同类型的数据文件。通过使用相应的代码,你可以将整个控件,某个特定的表单,或...

1896
来自专栏张善友的专栏

【实验手册】使用Visual Studio Code 开发.NET Core应用程序

2319
来自专栏ASP.NETCore

解决VS Code调试.NET Core应用遇到的坑

  博客园里有好多介绍怎么使用VS Code以及调试.NET Core的文章,但是都是基于直接构建Asp.Net Core Mvc单项目的,有什么区别呢!

1284
来自专栏Python

Python之Dijango的“坑” hostname, aliases, ipaddrs = gethostbyaddr(name) UnicodeDecodeError: 'utf-8' cod

错误代码提示: hostname, aliases, ipaddrs = gethostbyaddr(name) UnicodeDecodeError: 'ut...

3109
来自专栏张善友的专栏

【实验手册】使用Visual Studio Code 开发.NET Core应用程序

.NET Core with Visual Studio Code 目录 概述... 2 先决条件... 2 练习1: 安装和配置.NET Core以及Visu...

2709
来自专栏雨过天晴

原 用u盘制作mac安装盘

1494
来自专栏ml

ijg库的使用的几点注意

ijg库(http://www.ijg.org/)是用于处理jpeg解码和压缩的库,最新版本为2014发布的版本,可以在官网中下载jpegsr9a.zip 使用...

3415
来自专栏程序员的SOD蜜

64位系统使用Access 数据库文件的彻底解决方法

    最近,有PDF.NET用户问我怎么在64位系统下无法访问Access数据库的问题,我第一反应是我怎么没有遇到呢?今天一看自己的VS和Office都是32...

3285

扫码关注云+社区

领取腾讯云代金券