日志Nlog

       在性能代码性能优化的时候,马丹妹给予指导时,用了日志测试时间这个技术,很是吸引人,而且她也写了系列博客,看了师姐的博客后实践,然后写一篇简单的博客。

师姐系列博客地址:http://blog.youkuaiyun.com/u010176014/article/category/5834015

        NLog是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。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.计算机、进程和线程名称

      8.其他

 

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

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

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

      Info - 信息类型的消息

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

      Error - 错误信息

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

现在用实例来说明:

 一、输出到控制台

第一步:添加对NLog的引用

共添加两个文件,下图所示

方法1、Nuget:

 

 

 

方法2:、菜单中工具-库程序包管理器-程序包管理器控制台,输入Install-Package NLog和Install-Package NLog.config即可

引用成功后结果:

 

 

第二步:配置NLog.config文件

NLog.config中共包含两个节点,targets和rules。我们需要配置的也是这两个节点

 代码如下:


<span style="font-size:18px;"><?xml version="1.0"encoding="utf-8" ?> 
<nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsdNLog.xsd" 
     autoReload="true" 
     throwExceptions="false" 
     internalLogLevel="Off"internalLogFile="c:\temp\nlog-internal.log" > 
   <!-- optional, add some variabeles 
 https://github.com/nlog/NLog/wiki/Configuration-file#variables 
 --> 
   <variable name="myvar" value="myvalue"/> 
   <targets> 
       <!--添加一个新条目让日志输出到控制台中,并添加必要的输出布局(layout)--> 
       <target name="console" xsi:type="Console"layout="${longdate}|${level}|${message}"/> 
       <!--说明 xsi:type="Console"指定输出到控制台;layout指定输出文件内容的样式${longdate}是日期(具体到毫秒),${level}是日志的等级;${message}是具体要输出的内容。--> 
   </targets> 
 
   <rules> 
       <!--添加必要的规则--> 
       <logger name="*" writeTo="console"/> 
       <!--我个人设置的规则是,将所有记录的信息输出至控制台--> 
   </rules> 
</nlog></span>


第三步:输出

<span style="font-size:18px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NLog;
namespace ConsoleApplication1
{
   class Program
    {
       private static Logger logger = LogManager.GetCurrentClassLogger();//建立一个日志对象
       static void Main(string[] args)
       {
           logger.Trace("输出一条记录信息成功!");//最常见的记录信息,一般用于普通输出  
           logger.Debug("输出一条Debug信息成功!"); //同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序  
           logger.Info("输出一条消息类型信息成功!");//信息类型的消息  
           logger.Warn("输出一条警告信息成功");//警告信息,一般用于比较重要的场合  
           logger.Error("输出一条错误信息成功!");//错误信息 
           logger.Fatal("输出一条致命信息成功!");//致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。
       }
    }
}</span>


执行结果:

 

 

2、输出到文件:

其它不变,只是修改NLog.config配置文件:

<span style="font-size:18px;"><targets> 
       <!--说明 xsi:type="File"指定输出到文件类型;fileName指定输出文件的存放位置和文件名(可自定义),其中 
     ${basedir}是程序所在的路径; 
     ${shortdate}是日期(具体到日)。  
     layout指定输出文件内容的样式  
     ${level}是日志的等级; 
     ${longdate}是日期(具体到毫秒), 
     ${message}是具体要输出的内容。--> 
       <target name="Info" xsi:type="File"fileName="${basedir}/log/test.${shortdate}.log"layout="${longdate} [${level}]: ${message}"/> 
 
   </targets> 
 
   <rules> 
       <logger name="*" writeTo="Info"/> 
   </rules></span>

结果是:

 

3、输出到数据库:

配置文件修改为:

 

<span style="font-size:18px;"><?xml version="1.0"encoding="utf-8" ?>
<nlogxmlns="http://www.nlog-project.org/schemas/NLog.xsd"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsdNLog.xsd"
     autoReload="true"
     throwExceptions="false"
     internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log">
 <!-- optional, add some variabeles
 https://github.com/nlog/NLog/wiki/Configuration-file#variables
 -->
 <variable name="myvar" value="myvalue"/>
 <!--
  Seehttps://github.com/nlog/nlog/wiki/Configuration-file
  forinformation on customizing logging rules and outputs.
  -->
 <targets>
   <!--
   add your targets here
   See https://github.com/nlog/NLog/wiki/Targets for possible targets.
   See https://github.com/nlog/NLog/wiki/Layout-Renderers for the possiblelayout renderers.
   -->
   <!--添加一个新条目让日志输出到控制台中,并添加必要的输出布局(layout)-->
   <!--<target name="console" xsi:type="Console"layout="${longdate}|${level}|${message}"/>-->
   <!--说明 xsi:type="Console"指定输出到控制台;layout指定输出文件内容的样式${longdate}是日期(具体到毫秒),${level}是日志的等级;${message}是具体要输出的内容。-->
   
   <!--Writing events to the a file with the date in the filename.-->
   <!--<target name="Info" xsi:type="File"fileName="${basedir}/log/test.${shortdate}.log"layout="${longdate} [${level}]:${message}"/>-->
   <target xsi:type="Database" name="database"connectionString=" 
                Data Source=(local);InitialCatalog=NLogtest;Persist Security Info=True; 
                User ID=sa;Password=123456"commandText="insert into NLog_Log([CreateOn],[Origin],[LogLevel],[Message], [Exception],[StackTrace]) values (getdate(), @origin, @logLevel,@message,@exception, @stackTrace)">
     <!--日志来源-->
     <parameter name="@origin" layout="${callsite}"/>
     <!--日志等级-->
     <parameter name="@logLevel"layout="${level}"/>
     <!--日志消息-->
     <parameter name="@message"layout="${message}"/>
     <!--异常信息-->
     <parameter name="@exception"layout="${exception}" />
     <!--堆栈信息-->
      <parameter name="@stackTrace"layout="${stacktrace}"/>
   </target>
 </targets>
 <rules>
   <!-- add your logging rules here -->
   <!--<logger name="*" writeTo="Info"/>-->
   <logger name="*" minlevel="Debug"writeTo="database"/>
   <!--
   Write all events with minimal level of Debug (So Debug, Info, Warn,Error and Fatal, but not Trace)  to"f"
   <logger name="*" minlevel="Debug"writeTo="f" />
   -->
 </rules>
</nlog> </span>

结果是:

 

 

 

NLog是什么?NLog((http://www.nlog-project.org)是一个基于.NET平台编写的类库,我们可以使用NLog在应用程序中添加极为完善的跟踪调试代码。NLog完全实现了我们上面的期望目标,并且还远远不止这些……NLog允许我们自定义从跟踪消息的来源(source)到记录跟踪信息的目标(target)的规则(rules)。记录跟踪信息的目标(target)可以为如下几种形式:文件文本控制台Email数据库网络中的其它计算机(通过TCP或UDP)基于MSMQ的消息队列Windows系统日志其他形式,请参考http://www.nlog-project.org/targets.html除此之外,每一条跟踪消息都可以自动带有上下文信息(contextual information),并将其发送给记录跟踪信息的目标。这些上下文信息可以包含如下内容:当前的日期和时间(多种格式)记录等级来源名称输出跟踪消息的方法的堆栈信息环境变量的值异常的详细信息计算机、进程和线程名称其他,请参考:http://www.nlog-project.org/layoutrenderers.html 每条跟踪信息都包含一个记录等级(log level)信息,用来描述该条信息的重要性。NLog支持如下几种记录等级:Trace - 最常见的记录信息,一般用于普通输出Debug - 同样是记录信息,不过出现的频率要比Trace少一些,一般用来调试程序Info - 信息类型的消息Warn - 警告信息,一般用于比较重要的场合Error - 误信息Fatal - 致命异常信息。一般来讲,发生致命异常之后程序将无法继续执行。NLog是一个免费的、基于BSD license发布的开源类库。即使将其应用于商业使用中,也基本上不会有任何的限制。NLog的二进制可执行文件以及原文件均可在http://www.nlog-project.org/download.html页面中下载。我们同时还为NLog提供了图形界面的安装程序,您可以选择NLog的安装路径,并可在安装过程中添加如下内容到Visual Studio集成开发环境中(同样支持Express版本):配置文件模板NLog配置文件智能感知支持代码片断(code snippet)集成至“Add Reference...”对话框 标签:日志组件  log
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值