NLog

作者: BacteriumFox | 来源:发表于2020-11-02 12:38 被阅读0次

    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)可以为如下几种形式:

    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线程标识信息(用户名)
    

    相关文章

      网友评论

          本文标题:NLog

          本文链接:https://www.haomeiwen.com/subject/kpflmktx.html