日志Nlog

来源:互联网 发布:淘宝网鞋柜 编辑:程序博客网 时间:2024/06/05 10:13

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

师姐系列博客地址:http://blog.csdn.net/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>

结果是:

 

 

 

0 0
原创粉丝点击