一个简单好用的日志框架NLog

来源:互联网 发布:德比软件员工不思进取 编辑:程序博客网 时间:2024/06/01 07:12

在Nuget中安装NLog

NLog可以直接使用Nuget安装: PM > Install-Package Nlog

 

使用NLog

NLog的使用方式基本上和其它的Log库差不多,分为Trace、Debug、Info、Error、Fatal五个等级


   private static Logger logger = LogManager.GetCurrentClassLogger();    static void Main(string[] args)    {        logger.Trace("Trace Message");        logger.Debug("Debug Message");        logger.Info("Info Message");        logger.Error("Error Message");        logger.Fatal("Fatal Message");    }
不过它提供的方法倒是蛮多的,光Trace就有42种重载形式。虽然功能强大事件好事,但某种程度上也增加了学习成本。

配置NLog

执行了上面的语句后,实际上是没有任何效果的。因为我们还没有配置日志的输出路径。这个输出路径一般是在配置文件中配置的(也支持硬编码),NLog支持两种配置文件格式

  1. 配置信息嵌入在.NET应用程序标准的*.exe.config或者web.config文件里
  2. 保存在独立文件里,也叫单一格式

第一张方式比较常规,但我不喜欢这种方式,因为它和其它与日志无关的配置写在一块儿了,不方便在不同的项目中共享配置。这里主要介绍下独立文件的方式。NLog支持如下三种文件名的配置文件:"NLog.config"、"*.exe.nlog"和"NLog.dll.nlog",我比较喜欢第一种。不管哪一种,其内容是一样的,一个简单的示例如下:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    <targets>        <target name="console" xsi:type="Console" />        <target name="debugger" xsi:type="Debugger" layout="${date:format=HH\:mm\:ss.fff}: ${message}" />        <target name="error_file" xsi:type="File"                        fileName="${basedir}/Logs/Error/${shortdate}/error.txt" maxArchiveFiles="30"                        layout="${longdate} | ${level:uppercase=false} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />    </targets>    <rules>        <!--<logger name="*" writeTo="console" />-->        <logger name="*" minlevel="Debug" writeTo="debugger" />        <logger name="*" minlevel="Error" writeTo="error_file" />    </rules></nlog>

它主要包括两个部分:输出目标target路由规则rule。下面就分别介绍一下他们。


输出目标target

每个target代表一个输出目标,它主要包含两个属性:name和type。name是输出模板的名称,在后面的路由规则中使用,type则是输出类型,常见的有

  • Console        输出到控制台
  • Debugger     输出到
  • File        输出到文件
  • Mail        输出为邮件发送
  • Network        输出到网络地址
  • Database        输出到数据库

当选择某一种类型的时候,还需要配置相应的参数。如输出类型是File时,我们要配置日志路径filename,这里是可以使用一些变量的(花括号里面的部分),我这里的例子:

    fileName="${basedir}/Logs/Error/${shortdate}/error.txt"

输出的日志格式为 /Log/2014-10-01/err.txt    每天生成一个文件夹,非常方便。

输出格式的控制:

有的时候,我们需要对时间、异常等这些对象的输出格式进行控制。它们可以通过修改layout参数来实现。这一部分是相对比较复杂的,不在本文讨论范围之列,有空的话我再专门介绍下。

参考示例:

网上有许多现成的示例,直接参考一下比从头写起要们节省不少时间,这里我简单的列举两个,欢迎读者朋友推荐。

  • Nlog的官方示例
  • Most useful NLog configurations

顺便这儿也贴一个我常用的配置文档:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">    <targets>        <!--屏幕打印消息-->        <target name="console" xsi:type="ColoredConsole"                         layout="${date:format=HH\:mm\:ss}> ${message}"/>                <!--VS输出窗口-->        <target name="debugger" xsi:type="Debugger"                        layout="${date:format=HH\:mm\:ss} | ${level:padding=-5} | ${message}" />        <!--保存至文件-->        <target name="error_file" xsi:type="File" maxArchiveFiles="30"                        fileName="${basedir}/Logs/Error/${shortdate}/error.txt"                        layout="${longdate} | ${level:uppercase=false:padding=-5} | ${message} ${onexception:${exception:format=tostring} ${newline} ${stacktrace} ${newline}" />    </targets>    <rules>        <!--<logger name="*" writeTo="console" />-->        <logger name="*" minlevel="Debug" writeTo="debugger" />        <logger name="*" minlevel="Error" writeTo="error_file" />    </rules></nlog>

路由规则rule

路由规则主要用于将日志和输出目标匹配起来,它一般有如下几个属性

  • name - 记录者的名字 (允许使用通配符*)
  • minlevel - 匹配日志范围的最低级别
  • maxlevel - 匹配日志范围的最高级别
  • level - 匹配的单一日志级别
  • levels - 匹配的一系列日志级别,由逗号分隔。
  • writeTo - 规则匹配时日志应该被写入的一系列目标,由逗号分隔。

看上去有好几个属性,实际上用起来还是比较简单的,例如我前面的三条规则解释如下:

    <logger name="*" writeTo="console" />    将所有的日志输出到控制台中
    <logger name="*" minlevel="Debug" writeTo="debugger" />            Debug级别以上的日志输出到Debugger
    <logger name="*" minlevel="Error" writeTo="error_file" />        Error级别以上的日志输出到文件中

另外,NLOG支持配置多个路由规则,可以非常方便我们的输出。

 

由于篇幅有限,这里介绍得比较简略。更详细的配置文件设置可以参看官方文档:https://github.com/nlog/NLog/wiki/Configuration-file#configuration-file-locations


转载地址:点击打开链接

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 pinotnoir红酒 monastrell红酒 gassis红酒 到的组词有那些 到怎么组词 至的组词 至的组词是什么 到的组词 满的组词 99年女主播网吧拉到厕所 北京站到北京西站 北京西站到北京站 天津站到天津西站 北京南站到北京西站 南昌西站到昌北机场 重庆西站到重庆北站 南昌站到南昌西站 天津西站到天津站 北京西站到北京南站 济南西站到遥墙机场 兰州西站到中川机场 北京站到北京西站地铁 昌北机场到南昌西站 北京西站到首都机场 北京西站到天安门 重庆北站到重庆西站怎么走 哈尔滨站到哈尔滨西站 南昌西站到南昌站 南昌火车站到南昌西站 兰州机场到兰州西站 哈尔滨西站到哈尔滨站 长春站到长春西站 石家庄到北京西站火车时刻表 天津机场到天津西站 哈尔滨西站到机场 北京站到北京西站怎么走 哈尔滨东站到哈尔滨西站 重庆机场到重庆西站 邢台到北京西站火车时刻表 济南西站到济南站 济南站到济南西站