• ">
    • #">快速安装#
    • #">快速配置#
    • #">快速使用#
    • #">详解配置#
      • #">添加支持Console输出#
      • #">输出至CSV文件#
    • #">配置日志大小#
    • #">配置日志分级#
    • #">配置生成规则#
    • #">日志过滤器#
      • #">条件语言#
      • #">条件函数#
    • #">关于更多内容#

    引用:https://www.cnblogs.com/zh7791/p/12620439.html

    NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。
    NLog是一个简单灵活的.NET日志记录类库。通过使用NLog,我们可以在任何一种.NET语言中输出带有上下文的(contextual information)调试诊断信息,根据喜好配置其表现样式之后发送到一个或多个输出目标(target)中。
    如果嫌弃字多懒得看, 点击跳转视频地址

    快速安装#

    在软件包管理器控制台中使用GUI或以下命令:
    1.安装Nlog
    Copy

    1. Install-Package Nlog

    2.安装Nlog.Config
    Copy

    1. Install-Package Nlog.Config

    快速配置#

    打开目录中得Nlog.Config文件, 可以注意到, XML文件中有详细说明, rules区允许添加用户自定义得路由规则, targets则用于配置一些输出目标, 如下:

    1. <?xml version="1.0" encoding="utf-8" ?>
    2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
    5. autoReload="true"
    6. throwExceptions="false"
    7. internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
    8. <!-- optional, add some variables
    9. https://github.com/nlog/NLog/wiki/Configuration-file#variables
    10. -->
    11. <variable name="myvar" value="myvalue"/>
    12. <!--
    13. See https://github.com/nlog/nlog/wiki/Configuration-file
    14. for information on customizing logging rules and outputs.
    15. -->
    16. <targets>
    17. <!--
    18. add your targets here
    19. See https://github.com/nlog/NLog/wiki/Targets for possible targets.
    20. See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possible layout renderers.
    21. -->
    22. <!--
    23. Write events to a file with the date in the filename.
    24. <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
    25. layout="${longdate} ${uppercase:${level}} ${message}" />
    26. -->
    27. </targets>
    28. <rules>
    29. <!-- add your logging rules here -->
    30. <!--
    31. Write all events with minimal level of Debug (So Debug, Info, Warn, Error and Fatal, but not Trace) to "f"
    32. <logger name="*" minlevel="Debug" writeTo="f" />
    33. -->
    34. </rules>
    35. </nlog>

    我们暂时把注释的说明代码移除, 还原到最简洁得XML格式, 如下:

    1. <?xml version="1.0" encoding="utf-8" ?>
    2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
    4. <targets>
    5. <!--这个目标:最终输出文件类型, 位于根目录中得logs文件夹中, 名称以每日得时间一次生成log文件 , layout: 这个选项为生成的格式-->
    6. <target xsi:type="File" name="f"
    7. fileName="${basedir}/logs/${shortdate}.log"
    8. layout="${longdate} ${uppercase:${level}} ${message}" />
    9. </targets>
    10. <rules>
    11. <!--设定了一个Debug得路由, 最终指向了一个f名称得目标 -->
    12. <logger name="*" minlevel="Debug" writeTo="f" />
    13. </rules>
    14. </nlog>

    快速使用#

    1.创建Nlog实例
    Copy

    1. private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();

    2.使用Debug进行输出
    由于在Nlog.Config当中, 我们已经添加了Debug的最终输出目标, 所以我们尝试输出Debug的内容:

    1. class Program
    2. {
    3. private static readonly NLog.Logger Logger = NLog.LogManager.GetCurrentClassLogger();
    4. static void Main(string[] args)
    5. {
    6. Logger.Debug("我出现了意外!");
    7. Console.ReadKey();
    8. }
    9. }

    运行完成之后,可以在当前的输出目录中, 发生已经生成了一个logs的文件夹,并且生成了当前计算器日期的log文件 (这个规则在Nolog.Config当中可以进行配置), 如图所示:
    P2:Nlog 日志框架使用介绍(摘) - 图1

    详解配置#

    关于rules中, 我们可以添加多种路由规则, 并且指向多个目标, 如下所示:
    P2:Nlog 日志框架使用介绍(摘) - 图2

    添加支持Console输出#

    1.在rules中添加Info, writeTo指向一个Console的目标

    1. <targets>
    2. <!--<target xsi:type="File" name="f"
    3. fileName="${basedir}/logs/${shortdate}.log"
    4. layout="${longdate} ${uppercase:${level}} ${message}" />-->
    5. <target xsi:type="Console" name="console"/>
    6. </targets>
    7. <rules>
    8. <!--<logger name="*" minlevel="Debug" writeTo="f" />-->
    9. <logger name="*" minlevel="Info" writeTo="console"/>
    10. </rules>

    2.使用Info输出
    P2:Nlog 日志框架使用介绍(摘) - 图3

    输出至CSV文件#

    1.在rules中添加一个新的路由, 以支持csv文件, 并且添加一个目标, 输出至csv文件, column可以用于指定每列生成的数据内容格式

    1. <targets>
    2. <target name="csv" xsi:type="File" fileName="${basedir}/file.csv">
    3. <layout xsi:type="CSVLayout">
    4. <column name="time" layout="${longdate}" />
    5. <column name="message" layout="${message}" />
    6. <column name="logger" layout="${logger}"/>
    7. <column name="level" layout="${level}"/>
    8. </layout>
    9. </target>
    10. </targets>
    11. <rules>
    12. <logger name="*" minlevel="Debug" writeTo="csv" />
    13. </rules>

    最终调用Debug(“xxxx”), 输出的效果如下:
    P2:Nlog 日志框架使用介绍(摘) - 图4

    配置日志大小#

    Nlog允许用户配置单个文件大小, 放置在内容过长效率过慢,配置了大小之后, Nlog会自动创建一个新的文件副本,插入新的日志输出。

    1. maxArchiveFiles: 允许生成的副本文件最大数量
    2. archiveAboveSize: 允许单个文件得最大容量
    3. archiveEvery: 按天生成
    4. layout: 当前得内容布局格式
    5. fileName: 包含完整得生成文件得路径喝文件名

      1. <targets>
      2. <target name="file" xsi:type="File"
      3. layout="${longdate} ${logger} ${message}${exception:format=ToString}"
      4. fileName="${basedir}/logs/logfile.txt"
      5. maxArchiveFiles="5"
      6. archiveAboveSize="10240"
      7. archiveEvery="Day" />
      8. </targets>
      9. <rules>
      10. <logger name="*" minlevel="Debug" writeTo="file" />
      11. </rules>

      配置日志分级#

      单个文件目标可用于一次写入多个文件。以下配置将导致每个日志级别的日志条目被写入一个单独的文件,支持以下格式:
      Trace.log
      Debug.log
      Info.log
      Warn.log
      Error.log
      Fatal.log
      只需要在Nlog.Config中配置以下内容即可:

      1. <?xml version="1.0" ?>
      2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      4. <targets>
      5. <target name="file" xsi:type="File"
      6. layout="${longdate} ${logger} ${message}${exception:format=ToString}"
      7. fileName="${basedir}/${level}.log" />
      8. </targets>
      9. <rules>
      10. <logger name="*" minlevel="Debug" writeTo="file" />
      11. </rules>
      12. </nlog>

      配置生成规则#

      只需要将filename中编写得固定名称修改程 ${shortdate} 即可

      1. <?xml version="1.0" ?>
      2. <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      4. <targets>
      5. <target name="file" xsi:type="File"
      6. layout="${longdate} ${logger} ${message}${exception:format=ToString}"
      7. fileName="${basedir}/${shortdate}.log" />
      8. </targets>
      9. <rules>
      10. <logger name="*" minlevel="Debug" writeTo="file" />
      11. </rules>
      12. </nlog>

      日志过滤器#

      可以在路由当中, 为每个路由配置自定义得日志过滤器fliter, 如下所示, 演示了使用各种表达式来配置过滤器:

      1. <rules>
      2. <logger name="*" writeTo="file">
      3. <filters>
      4. <when condition="length('${message}') > 100" action="Ignore" />
      5. <when condition="equals('${logger}','MyApps.SomeClass')" action="Ignore" />
      6. <when condition="(level >= LogLevel.Debug and contains('${message}','PleaseDontLogThis')) or level==LogLevel.Warn" action="Ignore" />
      7. <when condition="not starts-with('${message}','PleaseLogThis')" action="Ignore" />
      8. </filters>
      9. </logger>
      10. </rules>

      条件语言#

      过滤器表达式以特殊的迷你语言编写。该语言包括:
      关系运算符:==,!=,<,<=,>=和>
      注意:一些预先定义的XML字符可能需要转义。例如,如果尝试使用’<’字符,则XML解析器会将其解释为开始标记,这会导致配置文件中的错误。而是<在这种情况下使用转义版本的<<(())。
      布尔运算符:and,or,not
      始终被视为布局的字符串文字- ${somerenderer}
      布尔文字- true和false
      数值文字-例如12345(整数文字)和12345.678(浮点文字)
      日志级别文字- LogLevel.Trace,LogLevel.Debug,…LogLevel.Fatal
      预定义的关键字来访问最常用的日志事件属性- level,message和logger
      花括号-一起覆盖默认优先级和分组表达式
      条件函数-执行string和object测试
      单引号应与另一个单引号转义。

      条件函数#

      以下条件功能可用:
      contains(s1,s2)确定第二个字符串是否是第一个的子字符串。返回:true当第二个字符串是第一个字符串的子字符串时,false否则返回。
      ends-with(s1,s2)确定第二个字符串是否是第一个字符串的后缀。返回:true当第二个字符串是第一个字符串的前缀时,false否则返回。
      equals(o1,o2)比较两个对象是否相等。返回:true当两个对象相等时,false否则返回。
      length(s) 返回字符串的长度。
      starts-with(s1,s2)确定第二个字符串是否是第一个字符串的前缀。返回:true当第二个字符串是第一个字符串的前缀时,false否则返回。
      regex-matches(input, pattern, options)在NLog 4.5中引入。指示正则表达式是否pattern在指定的input字符串中找到匹配项。options是一个可选的逗号分隔的RegexOptions枚举值列表。
      返回:true当在输入字符串中找到匹配项时,false否则返回。
      范例:regex-matches(‘${message}’, ‘^foo$’, ‘ignorecase,singleline’)

      关于更多内容#

      访问: https://github.com/NLog/NLog , 查看更多内容