NLog
简括
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)可以为如下几种形式:
- 文件
- 文本控制台
- 数据库
- 网络中的其它计算机(通过TCP或UDP)
- 基于MSMQ的消息队列
- Windows系统日志
上下文信息
除此之外,每一条跟踪消息都可以自动带有上下文信息(contextual information),并将其发送给记录跟踪信息的目标。这些上下文信息可以包含如下内容:
- 当前的日期和时间(多种格式)
- 记录等级
- 来源名称
- 输出跟踪消息的方法的堆栈信息
- 环境变量的值
- 异常的详细信息
- 计算机、进程和线程名称
Log类型
每条跟踪信息都包含一个记录等级(log level)信息,用来描述该条信息的重要性。NLog支持如下几种记录等级:
-
Trace- 最常见的记录信息,一般用于普通输出
-
Debug- 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序
-
Info- 信息类型的消息
-
Warn- 警告信息,一般用于比较重要的场合
-
Error- 错误信息
-
Fatal- 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
不同等级下颜色不同
安装
-
选中要安装NLog的项目=》右击=》管理NuGet程序包
-
点击浏览=》搜索框输入:Nlog =》第一个就是了,点击安装即可
补充:还有第三个NLog.Config配置文件也需要安装
-
查看我们的项目依赖项,在包体中能够看到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线程标识信息(用户名)
网友评论