日志框架Nlog之异步记录

来源:互联网 发布:win10软件闪退 编辑:程序博客网 时间:2024/06/03 14:52

     日志功能本来是一件非常好的事情,能帮助我们分析和解决很多问题。但是,如果让日志影响到性能,这就需要权衡一下了。没关系,本篇博客咱们不仅来解决这个问题,咱们更要眼见为实,带图带真相让你用的明明白白。


日志实现异步功能

           其实呢就一句话。。

           配置文件targets中配置async="true"即为异步。默认或写false都为同步。


准备

     接下来让我们开始测试。我还是用了上篇博客中将日志输出到数据库中的例子。不过为了效果明显,客户端的代码稍有改动,添加了循环。是这样的:

<span style="font-family:KaiTi_GB2312;font-size:18px;">using NLog;using System;using System.Text;namespace NLogToSql{    /// <summary>    ///用来测试 日志记录同步和异步-马丹妹-2015年9月25日    /// </summary>    class Program    {        private static Logger logger = LogManager.GetCurrentClassLogger();  //Logger对象代表与当前类相关联的日志消息的来源            static void Main(string[] args)        {            for (int i = 0; i < 5000; i++)            {                logger.Debug("同步异步测试!");//记录到数据库             }             string time = System.DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss.fff");             Console.WriteLine(time);//打印到控制台语句        }      }}</span>


判断依据

    如果记录日志是同步的话,那程序必然是先执行1000次输出到数据库的语句,然后执行下面一句打印到控制台。而,如果程序是异步的话,那很有可能在日志记录到数据库还没有全部执行完的时候,下面打印到控制台的语句就已经执行了。也就是我们通过各个语句的标记时间就能看出是同步还是异步。


测试一

       默认不配置,或配置成async="false"  -----------同步情况。看图:

           

     我们发现打印到控制台的语句是在16秒571输出的,而循环写日志最后的时间是15秒213。   可见确是循环所有日志全部记录之后才打印到控制台的。


测试二

     配置成async="true"------------异步情况,看图:

          

     如此,一张图胜过千言万语。


最后,再给大家带一个福利。


      

      我查询了一秒钟记录日志的条数有700多。所以如果量不大的话,也基本是毫毫秒的事。如果对性能要求没有那么苛刻的话,使用同步记录还是没有任何影响的。当然,如果真的日志记录量非常大,采用 异步也是不错的选择。不过这时候,你要考虑到日志的记录时间可能就和你要记录的上下文中的语句执行时间有所不同咯。


      



0 0