返回

ETNlog

简括

NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出**带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)**中。

NLog的.NET API的过滤信息功能执行效率很高,这样我们就可以一直保留程序中的日志写入代码,然后由NLog在运行时将其根据需要过滤掉。在一个1.6G单CPU笔记本电脑上,NLog每秒钟可以过滤掉1.5亿条日志写入语句!加上**异步处理(asynchronous processing)以及其他包装程序(wrappers)**的支持,NLog将成为一个极为强大的、且极具伸缩性的日志记录工具,

跟踪目标

NLog允许我们自定义从跟踪消息的来源(source)到记录跟踪信息的目标(target)规则(rules)。记录跟踪信息的目标(target)可以为如下几种形式:

  1. 文件
  2. 文本控制台
  3. Email
  4. 数据库
  5. 网络中的其它计算机(通过TCP或UDP)
  6. 基于MSMQ的消息队列
  7. Windows系统日志

上下文信息

除此之外,每一条跟踪消息都可以自动带有上下文信息(contextual information),并将其发送给记录跟踪信息的目标。这些上下文信息可以包含如下内容:

  1. 当前的日期和时间(多种格式)
  2. 记录等级
  3. 来源名称
  4. 输出跟踪消息的方法的堆栈信息
  5. 环境变量的值
  6. 异常的详细信息
  7. 计算机、进程和线程名称

Log类型

每条跟踪信息都包含一个记录等级(log level)信息,用来描述该条信息的重要性。NLog支持如下几种记录等级:

  1. Trace- 最常见的记录信息,一般用于普通输出

  2. Debug- 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序

  3. Info- 信息类型的消息

  4. Warn- 警告信息,一般用于比较重要的场合

  5. Error- 错误信息

  6. Fatal- 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。

    不同等级下颜色不同

安装

  1. 选中要安装NLog的项目=》右击=》管理NuGet程序包

  2. 点击浏览=》搜索框输入:Nlog =》第一个就是了,点击安装即可

    补充:还有第三个NLog.Config配置文件也需要安装

  3. 查看我们的项目依赖项,在包体中能够看到NLog与NLog.Config就说明我们安装成功了

使用

就是这么简单,才怪

输入以上代码后运行程序不会有任何改变,我们还需要在Nlog.Config里对配置进行修改

这里给出一份比较简易的输出配置清单作为参考:

<?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">

  <!-- 常量 -->
  <variable name="appType" value="" />
  <variable name="appId" value="" />

  <!--跟踪目标-->
  <targets>
    <!-- name=目标名称  xsi:type=输出类型:文件/控制台
         fileName=文件保存地址
         deleteOldFileOnStartup=清除之前已存在文件
         layout=输出布局
    -->
    <target name="all" xsi:type="File"
			fileName="${basedir}/../Logs/Log.txt"
			deleteOldFileOnStartup="false"
			layout="${longdate} ${var:appTypeFormat} ${var:appIdFormat} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}" />
    <target name="allConsole" type="ColoredConsole"
      layout="${longdate} ${var:appTypeFormat} ${var:appIdFormat} ${callsite:className=false:methodName=false:fileName=true:includeSourcePath=false:skipFrames=2} ${message}" />
  </targets>

  <!-- 日志规则 -->
  <rules>
    <!-- name=规则名称 minlevel/maxlevel=最小最大日志等级 跟踪目标名称-->
    <logger name="*" minlevel="Trace" maxlevel="Fatal" writeTo="all" />
    <logger name="*" minlevel="Trace" maxlevel="Fatal" writeTo="allConsole" />
  </rules>

</nlog>

配置文件的结构可以划分为三部分:常量部分、跟踪目标、日志规则

  • 常量部分我们可以设置一些常量,在输出控制台的时候直接打印内容
  • 跟踪目标,我们需要先设立一个名称,该名称将会在后续日志规则中用到。在追踪目标中我们可以设置输出类型、输出目标地址、输出布局等等,其中输出布局中我们可以设置Log需要采集打印的信息,具体规则将会在后面给出表格。
  • 日志规则,日志规则决定了我们需要监听什么等级的Log,通过minlevel与maxlevel来设置,writeTo对应的是跟踪目标配置(相当于日志规则管理监听对象,跟踪目标管理输出格式)。

以上三个部分都可以增加,例如我想设置只监听Error层级的,就可以在日志规则中添加一条规则,并在跟踪目标中添加新的输出规则。


附录:layouts 属性

${activityid}	将其置入日志System.Diagnostics trace 
${all-event-properties}	事件日志上下文
${appdomain}	当前应用程序域
${assembly-version}	应用程序
${basedir}	应用程序域的基本目录。
${callsite}	(类名称、方法名称和相关信息的源信息)。
${callsite-linenumber}	调用类的
${counter}	数值
${date}	当前日期和时间。
${document-uri}	用于Silverlight应用。
${environment}	环境变量
${event-properties}	 
${exception}	exception信息
${file-contents}	显示指定文件的内容
${gc}	垃圾收集器
${gdc}	诊断上下文
${guid}	GUID
${identity}	线程标识信息
${install-context}	安装参数
${level}	级别。
${literal}	 
${log4jxmlevent}	XML事件描述
${logger}	记录器的名字
${longdate}	日期和时间的格式分类yyyy-MM-dd HH:mm:ss.ffff。
${machinename}	名称
${mdc} 	映射诊断
${mdlc}	异步映射诊断上下文
${message}	消息
${ndc}	线程结构
${ndlc}	异步线程
${newline}	文字换行
${nlogdir}	nlog.dll目录。
${performancecounter}	述性能计数器。
${processid}	当前进程标识符
${processinfo}	运行信息
${processname}	当前进程的名称。
${processtime}	该时间过程中格式HH:MM:ss.mmm。
${qpc}	高精度定时器,基于返回的值从queryperformancecounter(任选地)转换为秒。
${registry}	从注册表中的值。
${sequenceid}	ID
${shortdate}	短时间 格式YYYY-MM-DD。
${sl-appinfo}	Silverlight应用。
${specialfolder}	文件夹路径
${stacktrace} -	堆栈跟踪渲染器。
${tempdir}	临时目录中。
${threadid}	当前线程的标识符。
${threadname}	当前线程。
${ticks}	当前日期和时间。
${time}	24小时格式HH:MM:ss.mmm。
${var}	{$var}-提供新的变量(4.1)
${windows-identity}	indows线程标识信息(用户名)
Licensed under CC BY-NC-SA 4.0
0