以前小编记录日志使用的是Log4Net,虽然好用但和NLog比起来稍显复杂。下面小编就和大伙分享一下NLog的使用方式。

引用NLog.Config

在使用NLog之前,我们要首先添加对NLog.Config的引用,这里小编使用NuGet来添加引用,在安装NLog.Config时会同时安装NLog.Schema和NLog包。

输出日志
 //实例化Logger对象,默认logger的名称是当前类的名称(包括类所在的命名空间名称)
Logger logger = LogManager.GetCurrentClassLogger();
//两种记录日志的方式
logger.Log(LogLevel.Warn, "warning");
//Info方法表示日志级别是Info
logger.Info(() => "record logger info");
配置NLog

只有代码是不够的,要想让代码发挥作用还要进行相关配置。我们在添加NLog.Config包后,项目中会自动添加一个名为NLog.config的文件,针对NLog的配置就写在该文件中。

 <targets>
<!--xsi:type表示日志的输出方式,File表示将日志写到文件中-->
<target name="logfile" xsi:type="File" fileName="日志文件全名"/>
<!--xsi:type="Console"表示将日志信息打印到控制台上-->
<target name="logConsole" xsi:type="Console"/>
</targets> <rules>
<logger name="*" minlevel="Info" writeTo="logfile"/>
<!--name指的是程序代码中logger对象的名字(默认是logger对象所在的命名空间名.类名),writeTo的值是配置文件中target的名字-->
<logger name="Test.Program" minlevel="Debug" writeTo="logConsole"/>
</rules>

日志在控制台中输出效果如下:

滚动日志

当需要记录大量的日志信息时,若将日志信息都写入同一个文件中显然是不合适的,创建大量的日志文件来记录日志信息也是没有必要的。这时我们可以使用滚动日志的形式来记录日志信息。NLog中滚动日志的配置如下:

 <target name="logfile" xsi:type="File"
<!--主日志文件路径,${basedir}表示项目所在目录的bin\Debug文件夹-->
fileName="${basedir}\Logs\log.txt"
<!--archiveFileName表示滚动日志存放路径,log.{#####}.txt是滚动日志文件名-->
archiveFileName="${basedir}\Archives\log.{#####}.txt"
<!--每个日志文件大小的最大值(单位:字节),主日志文件超过大小超过该值时会将文件内容写入滚动日志并清空主日志文件内容-->
archiveAboveSize="1024"
archiveNumbering="Rolling"
concurrentWrites="true"
<!--滚动日志文件上限数,滚动日志文件数达到上限新的文件内容会覆盖旧文件内容 -->
maxArchiveFiles="2"
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 Core中使用NLog记录日志

    2019/10/28, Asp.Net Core 3.0, NLog 4.6.7, NLog.Web.AspNetCore 4.9.0 摘要:NLog在asp.net网站中的使用,NLog日志写入数据 ...

  2. ASP.NET Core:ASP.NET Core中使用NLog记录日志

    一.前言 在所有的应用程序中,日志功能是不可或缺的模块,我们可以根据日志信息进行调试.查看产生的错误信息,在ASP.NET Core中我们可以使用log4net或者NLog日志组件来实现记录日志的功能 ...

  3. 在.net core web 项目中使用Nlog记录日志

    第1步,添加NLog.Web.AspNetCore包引用 方法1 在项目上右击“依赖项”---“管理Nuget程序包(N)…”,然后在浏览对话框中输入“NLog.Web.AspNetCore”查找包, ...

  4. [转]C# 使用Nlog记录日志到数据库

    本文转自:http://www.cnblogs.com/weixing/archive/2013/04/26/3044422.html 摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输 ...

  5. Nlog 记录日志到 sqlite

    最近研究了一下Nlog这个日志框架,这里记录一下如何将日志写到sqlite中. 第一步:使用NuGet获取Nlog和Sqlite 第二步:在sqlite中创建一个database,这里我用了SQLit ...

  6. C# 使用Nlog记录日志到数据库 使用LogEventInfo类获取,命名空间名称、类名、方法名

    原文地址:http://dotnet.9sssd.com/csbase/art/793 [摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数 ...

  7. asp.net core 使用NLog记录日志到txt文件

    一.使用VisualStudioCode创建一个webapi项目(也可以是mvc等).一个类库(用于封装记录日志方法,当然如果使用依赖注入到控制台项目,就不需要此类库了). 二.在类库中添加NLog. ...

  8. EF+LINQ事物处理 C# 使用NLog记录日志入门操作 ASP.NET MVC多语言 仿微软网站效果(转) 详解C#特性和反射(一) c# API接受图片文件以Base64格式上传图片 .NET读取json数据并绑定到对象

    EF+LINQ事物处理   在使用EF的情况下,怎么进行事务的处理,来减少数据操作时的失误,比如重复插入数据等等这些问题,这都是经常会遇到的一些问题 但是如果是我有多个站点,然后存在同类型的角色去操作 ...

  9. C# 使用Nlog记录日志到数据库

    [摘要]Nlog是一个很不错的.NET日志记录组件,它可以将日志输出到控件台,保存到文本,也可以很方便的记录到数据库中.本文为你介绍C# 使用Nlog记录日志到数据库. Nlog是一个很不错的.NET ...

随机推荐

  1. SharePoint 2010中一些必须知道的限制

    最大文件名长度是123个字符. 一个文档库(library)里最多可以存放10000个文档 一个视图(view)里最多显示5000个条目(item) 推荐的单个内容数据库(content databa ...

  2. 夜深了,写了个JQuery的省市区三级级联效果

    刚刚练手的JQuery,希望大神们指正 主要实现以下功能: 1.三级菜单级联加载数据 2.可以在不操作脚本的情况下,给元素加属性实现级联功能 3.自定义动态显示数据 咨询问题: 对于一般比较固定不变的 ...

  3. 剑指Offer面试题:30.第一个只出现一次的字符

    一.题目:第一个只出现一次的字符 题目:在字符串中找出第一个只出现一次的字符.如输入"abaccdeff",则输出'b'.要求时间复杂度为O(n). 最直观的想法是从头开始扫描这个 ...

  4. imagepool前端图片加载管理器(JavaScript图片连接池)

    前言 imagepool是一款管理图片加载的JS工具,通过imagepool可以控制图片并发加载个数. 对于图片加载,最原始的方式就是直接写个img标签,比如:<img src="图片 ...

  5. Functional Programming without Lambda - Part 2 Lifting, Functor, Monad

    Lifting Now, let's review map from another perspective. map :: (T -> R) -> [T] -> [R] accep ...

  6. WCF服务创建与抛出强类型SOAP Fault

    原创地址:http://www.cnblogs.com/jfzhu/p/4060666.html 转载请注明出处 前面的文章<WCF服务的异常消息>中介绍过,如果WCF Service发生 ...

  7. 加谁的QQ,并聊天‘

    tencent://AddContact/?fromId=45&fromSubId=1&subcmd=all&uin=150540451&fuin=904776475

  8. Zabbix实现微信报警

    一.  申请企业微信账号,申请地址 https://qy.weixin.qq.com/ 二. 登陆企业微信账 图一 图二 2.添加微信账号 图一 图二 完成以上步骤后 就完成了微信账号的添加 三.新建 ...

  9. 获取Linux主机的CPU、内存、主板、BIOS的信息(Centos)

    #!/usr/bin/env python #coding:utf-8 import subprocess import re def Cmd_Exec(cmd): ''' 执行获取信息命令 :par ...

  10. Sql Server系列:Insert语句

    1 INSERT语法 [ WITH <common_table_expression> [ ,...n ] ] INSERT { [ TOP ( expression ) [ PERCEN ...