日志框架Nlog之异步记录

2024-05-08 08:32
文章标签 日志 记录 框架 异步 nlog

本文主要是介绍日志框架Nlog之异步记录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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


日志实现异步功能

           其实呢就一句话。。

           配置文件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多。所以如果量不大的话,也基本是毫毫秒的事。如果对性能要求没有那么苛刻的话,使用同步记录还是没有任何影响的。当然,如果真的日志记录量非常大,采用 异步也是不错的选择。不过这时候,你要考虑到日志的记录时间可能就和你要记录的上下文中的语句执行时间有所不同咯。


      



这篇关于日志框架Nlog之异步记录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/969825

相关文章

Redis消息队列实现异步秒杀功能

《Redis消息队列实现异步秒杀功能》在高并发场景下,为了提高秒杀业务的性能,可将部分工作交给Redis处理,并通过异步方式执行,Redis提供了多种数据结构来实现消息队列,总结三种,本文详细介绍Re... 目录1 Redis消息队列1.1 List 结构1.2 Pub/Sub 模式1.3 Stream 结

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

在Spring Boot中浅尝内存泄漏的实战记录

《在SpringBoot中浅尝内存泄漏的实战记录》本文给大家分享在SpringBoot中浅尝内存泄漏的实战记录,结合实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录使用静态集合持有对象引用,阻止GC回收关键点:可执行代码:验证:1,运行程序(启动时添加JVM参数限制堆大小):2,访问 htt

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

MySQL 中查询 VARCHAR 类型 JSON 数据的问题记录

《MySQL中查询VARCHAR类型JSON数据的问题记录》在数据库设计中,有时我们会将JSON数据存储在VARCHAR或TEXT类型字段中,本文将详细介绍如何在MySQL中有效查询存储为V... 目录一、问题背景二、mysql jsON 函数2.1 常用 JSON 函数三、查询示例3.1 基本查询3.2

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Python获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,