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

版权声明

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

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

.NET中使用NLog记录日志相关推荐

  1. ASP.NET应用程序使用NLog记录日志

    在上一家公司就在使用NLog做日志记录,调用方便又好配置,查看日志非常方便.所以在新公司新项目中就想到了它.背景交代完毕. 先看配置,在ASP.NET应用程序中,NLog会自动扫描以下这几个文件 1) ...

  2. 如何在 ASP.NET Core 中使用 NLog 的高级特性

    NLog 是一个开源的轻量级日志框架,提供了丰富的日志路由和管理功能,同时 NLog 也是非常容易的去配置和扩展,其实在之前的文章中我已经讨论过了 Nlog,在这篇我准备继续和大家讨论一下 NLog ...

  3. oracle nlog,C#使用NLog记录日志

    NLog是什么? NLog是一个简单灵活的.NET日志记录类库,可以免费使用的开源代码. NLog日志输出什么类型? 输出文本文件,如TXT文件 输出控制台 输出EMAIL邮件 输出数据库 输出Win ...

  4. python中的logging记录日志_[ Python入门教程 ] Python中日志记录模块logging使用实例...

    python中的logging模块用于记录日志.用户可以根据程序实现需要自定义日志输出位置.日志级别以及日志格式. 将日志内容输出到屏幕 一个最简单的logging模块使用样例,直接打印显示日志内容到 ...

  5. Java中使用log4j记录日志

    在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...

  6. java log4j记录_JAVA中使用LOG4J记录日志

    在项目开发中,记录错误日志是一个很有必要功能.一是方便调试:二是便于发现系统运行过程中的错误:三是存储业务数据,便于后期分析: 在java中,记录日志,有很多种方式. 比如,自己实现. 自己写类,将日 ...

  7. 使用Nlog记录日志到数据库

    Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数据库中. 可以在这里下载Nlog:http://nlog-project.org/ 这里分享一下 ...

  8. 介绍photoshop教程中保存历史记录日志的方法

    photoshop教程中保存历史记录,有利于我们日后的学习和作图参考. 我们在使用Photoshop作图时,历史记录可以记录下所有的操作过程.比如这样一种情景,我们今天做这副效果图使用了什么效果如何如 ...

  9. Spring中使用Log4j记录日志

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/logging-with-log4j.html: 例子: pom.xml: <project ...

最新文章

  1. 组策略妙用----通过组策略禁止域用户更改IP地址
  2. sdut 2107 DFS
  3. SO_REUSEADDR和SO_REUSEPORT
  4. mysql开启查看慢查询日志[转]
  5. 网页编程中的模态对话框
  6. 测试lazy_enable_if的所有变体
  7. [转]httpclient编码
  8. [Asp.net 5] DependencyInjection项目代码分析4-微软的实现(5)(IEnumerable补充)
  9. 鸿蒙系统-手机-HAP开发编译调试
  10. 接口测试时,输入所有参数的参数值后,接口返回“参数错误:所有参数都不能为空”
  11. 喜欢 TypeScript 的人,一点都不比 Python 少
  12. 导入jasperreports出现Cannot resolve com.lowagie:itext:2.1.7.js6异常、生成PDF中文不显示中文解决方法、使用命令安装jar包
  13. matlab数字信号处理程序,MATLAB数字信号处理 85个案例分析 全书程序
  14. php require找不到文件,第一次运行Fatal error: require_once找不到文件
  15. 北向接口jms消息服务器,运行日志 - eSight V300R010C00SPC600 维护指南 18 - 华为
  16. 为什么说跳槽加薪低于30%,等于在“降薪”?
  17. Cubieboard2开发要点简记
  18. 红帽linux默认用户名,RedHat Linux实现root身份的Telnet登录
  19. couch base使用记录
  20. H5地理定位、百度地图使用

热门文章

  1. .NET 4.5 基类库中的新增功能
  2. httpd启动不能加载模块
  3. Hook技术之4 在自己的进程中注入一个Dll到别人的进程
  4. 自定义全局按键修饰符
  5. O(n^2) 级别的排序算法
  6. tomcat安装及使用详解
  7. 查询表空间是否是设置了自增
  8. Attach()和Detach()函数
  9. 自制清理电脑里的垃圾软件
  10. 如何更新 Exchange2003 SP2 中的智能邮件筛选器版本