日志框架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

相关文章

Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题

《Python爬虫HTTPS使用requests,httpx,aiohttp实战中的证书异步等问题》在爬虫工程里,“HTTPS”是绕不开的话题,HTTPS为传输加密提供保护,同时也给爬虫带来证书校验、... 目录一、核心问题与优先级检查(先问三件事)二、基础示例:requests 与证书处理三、高并发选型:

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

Java 日志中 Marker 的使用示例详解

《Java日志中Marker的使用示例详解》Marker是SLF4J(以及Logback、Log4j2)提供的一个接口,它本质上是一个命名对象,你可以把它想象成一个可以附加到日志语句上的标签或戳... 目录什么是Marker?为什么使用Markejavascriptr?1. 精细化的过滤2. 触发特定操作3

docker编写java的jar完整步骤记录

《docker编写java的jar完整步骤记录》在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,:本文主要介绍docker编写java的jar的相关资料,文中通过代... 目录all-docker/生成Docker打包部署文件配置服务A的Dockerfile (a/Docke

linux查找java项目日志查找报错信息方式

《linux查找java项目日志查找报错信息方式》日志查找定位步骤:进入项目,用tail-f实时跟踪日志,tail-n1000查看末尾1000行,grep搜索关键词或时间,vim内精准查找并高亮定位,... 目录日志查找定位在当前文件里找到报错消息总结日志查找定位1.cd 进入项目2.正常日志 和错误日

MySQL使用EXISTS检查记录是否存在的详细过程

《MySQL使用EXISTS检查记录是否存在的详细过程》EXISTS是SQL中用于检查子查询是否返回至少一条记录的运算符,它通常用于测试是否存在满足特定条件的记录,从而在主查询中进行相应操作,本文给大... 目录基本语法示例数据库和表结构1. 使用 EXISTS 在 SELECT 语句中2. 使用 EXIS

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键