如何在 ASP.Net Core 中使用 LoggerMessage

ASP.NET Core 是一个开源的、跨平台的、轻量级模块化框架,可用于构建高性能、可伸缩的web应用程序,你也许不知道 ASP.NET Core 中有一个藏得很深,而且非常强大的特性,那就是 LoggerMessage,与内建的 Logger 相比,前者具有更高的性能,这篇文章我们来一起讨论 LoggerMessage 到底能带来什么好处,以及如何在 ASP.NET Core 3.0 中使用 LoggerMessage 。

LoggerMessage VS Logger

与内置的 Logger 相比,LoggerMessage提供了以下几个优点。

  • 性能

LoggerMessage 比 Logger 具有更少的对象分配和计算开销,内建的 Logger 有装箱操作,而 LoggerMessage 巧妙的利用了静态字段,静态方法,以及具有强类型扩展方法来避免装箱开销。

  • 解析

Logger 相比,LoggerMessage 的解析机制更加高效,Logger 会在每次写入消息的时候都要解析模板,而 LoggerMessage 只需在消息定义的时候解析一次。

使用 LoggerMessage.Define 方法

Microsoft.Extensions.Logging 命名空间下的 LoggerMessage.Define<T> 方法可用于高性能的记录日志,要使用这个方法,需要指定正确的强类型参数。

下面是 LoggerHelper.Define<T>() 源码定义

接下来我们看一下如何使用 LoggerMessage.Define 方法,先定义一个静态的 LoggerExtensions 类,如下代码所示:


internal static class LoggerExtensions
{}

接下来创建一个用来记录日志的扩展方法,内部使用的是 LoggerMessage.Define 方法,代码如下:

internal static class LoggerExtensions{public static void RecordNotFound(this ILogger logger, int id) => NotFound(logger, id, null);private static readonly Action<ILogger, int, Exception> NotFound = LoggerMessage.Define<int> (LogLevel.Error, new EventId(1234, nameof(NotFound)),"The record is not found: {Id}");}

Action 中使用 LoggerMessage

接下来在项目默认的 HomeController.Index() 方法中使用刚才创建的日志扩展方法,如下代码所示:

public class HomeController : Controller{private readonly ILogger<HomeController> _logger;public HomeController(ILogger<HomeController> logger){_logger = logger;}public IActionResult Index(){_logger.RecordNotFound(1);return View();}}internal static class LoggerExtensions{public static void RecordNotFound(this ILogger logger, int id) => NotFound(logger, id, null);private static readonly Action<ILogger, int, Exception> NotFound = LoggerMessage.Define<int>(LogLevel.Error, new EventId(1234, nameof(NotFound)), "The record is not found: {Id}");}

LoggerMessage.Define 可以用来创建能够缓冲日志消息的委托,这种方法相比内建的 Logger 具有更高的性能,最后你可以在 https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/loggermessage?view=aspnetcore-3.1  上了解更多关于 LoggerMessage 的知识。

译文链接:https://www.infoworld.com/article/3535790/how-to-use-loggermessage-in-aspnet-core-30.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305403.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

希望不要T我~~哈哈...

不在学校&#xff0c;上网不便&#xff0c;账号未登入时间期限若到~还望别T&#xff0c;呵呵....我喜欢这里~多谢老大&#xff01;&#xff01;&#xff01;&#xff01;技术成就梦想&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;转载于:https://blog.51cto.c…

模拟器显示空白图片_Kawaks街机模拟器,还是小时候的味道!

APP菜园打造属于我们自己的APP帝国1.打开支付宝app&#xff0c;首页搜索 “8221050” 然后点击快捷功能&#xff0c;天天领红包。2.软件领取流程&#xff1a;1.认真阅读下软件介绍&#xff1b;2.找到图片下方的“获取链接”复制&#xff1b;3.打开手机上的浏览器粘贴链接搜索(…

7段均衡器最佳参数_介绍一下十段均衡器的设置和参数

介绍一下十段均衡器的设置和参数【第一章.EQ的基本定义】EQ是Equalizer的缩写&#xff0c;大陆称为均衡器&#xff0c;港台称为等化器。作用是调整各频段信号的增益值。10段均衡器表示有10个可调节节点。节点越多&#xff0c;便可以调节出更精确的曲线&#xff0c;同时难度更大…

ASP.NET Core 查看应用状态和统计

在日常开发中&#xff0c;我们需要关注 .NET 应用的资源使用情况&#xff0c;方便排查问题和扩容。通过 Ajax 请求获取统计信息&#xff0c;展示成图表&#xff0c;如下图&#xff1a;CLRStats 插件&#xff0c;一个统计 .NET 应用资源使用情况的插件&#xff0c;包含&#xff…

circle后面是什么意思 python_Ape circle Python操作-第2-01章-列表操作,小猿圈,作业

# 写代码&#xff0c;有如下列表&#xff0c;按照要求实现每一个功能li [alex, eric, rain]# 计算列表长度并输出length len(li)print(f1-li的长度是&#xff1a;{length})# 列表中追加元素“seven”&#xff0c;并输出添加后的列表li.append(seven)print(2-追加元素后的li是…

python插入排序_python 插入排序,选择排序

插入排序&#xff1a; def insert_sort(lst): for i in range(1,len(lst)): xlst[i] #x是一个临时变量&#xff0c;表示当前轮到的数字 ji #临时变量 j ,为后续的排序提供方便 while j>0 and lst[j-1]>x: #当j 小于0&#xff0c;说明已经数字比较到了第一位&#xff0c;说…

【Vscode】调试DotNet Core代码

Visual Studio作为宇宙第一的IDE&#xff0c;开发调试.net core app&#xff0c;无一能出其右&#xff0c;我们还需要去了解Visual Studio Code吗&#xff1f;答案是肯定。杀鸡焉用牛刀&#xff1a;就一个hello world的Console App&#xff0c;还需要打开Visual Studio吗&#…

Visual Basic、C# 和 C++ 的数据类型比较(转)

类别类名说明Visual Basic 数据类型C# 数据类型C 托管扩展数据类型JScript 数据类型整数Byte8 位的无符号整数。BytebytecharByteDZX7¢&dot [url]www.cnntec.com[/url]…gT‚sSByte8 位的有符号整数。 不符合 CLS。DZX7¢&dot [url]www.cnntec.com[/url]…gT‚…

pandownload 卢本伟_PanDownload复活了!60MB/s!附下载地址

最近几天&#xff0c;听说PanDownload 复活了有人接盘了&#xff0c;重新制作上线推出了更加强劲的复活版&#xff01;但是笔者去下载了一下&#xff0c;发现并不能使用于是经过百般搜寻&#xff0c;发现被人提供的已经是旧版了于是&#xff0c;我找到了最新版&#xff0c;9月2…

mysql 精度_mysql-笔记 精度

decimal数据类型是fixed-point类型&#xff0c;计算结算是准确的。numeric/dec/fixed / integerfloat/double数据类型是 floating-point类型&#xff0c;计算结果是大约的。float/double/double precision/realDecimal(M,D):M 最大精度位数 1到65D小数位数 0到30&#xff0c;不…

linux安装rz命令_Linux 安装dep安装包命令

rootlsy-ubuntu:~# dpkg -i sublime-text_build-3126_amd64.deb 正在选中未选择的软件包 sublime-text。(正在读取数据库 ... 系统当前共安装有 256092 个文件和目录。)正准备解包 sublime-text_build-3126_amd64.deb ...正在解包 sublime-text (3126) ...正在设置 sublime-tex…

Excel分列功能的妙用

我们用left函数可以将姓名中的姓和名分开了&#xff0c;说实话&#xff0c;这个方法比较笨&#xff0c;因为EXCEL中提供了分列功能。 我们可以看下面这个例子&#xff0c;原始数据中含有编号&#xff0c;而且随着行数的增加&#xff0c;编号位数也在增加&#xff0c;这时就不能…

IdentityServer4之Implicit和纯前端好像很配哦

前言上一篇Resource Owner Password Credentials模式虽然有用户参与&#xff0c;但对于非信任的第三方的来说&#xff0c;使用这种模式是有风险的&#xff0c;所以相对用的不多&#xff1b;这里接着说说implicit隐式模式&#xff0c;这种模式比较适合于纯前端客户端&#xff0c…

libaio.so.1 mysql_libaio.so.1()(64bit) is needed by MySQL-server

从官网下的mysql5.5的server&#xff0c;系统是centos 6.4x86_64,安装时一直报错&#xff1a;[rootdbserver opt]# rpm -ivh MySQL-server-5.5.31-2.el6.x86_64.rpmerror: Failed dependencies:libaio.so.1()(64bit) is needed by MySQL-server-5.5.31-2.el6.x86_64libaio.so.1…

docker 安装kafka_laradock 中如何安装 Laravel Dusk

laradock 中如何安装 Laravel Dusk&#xff1f;导语在本地安装 Laravel Dusk 一直失败&#xff0c;查了文档才发现在 laradock 中并不是只需要 composer require 就可以的&#xff0c;还有其他配置。下面记录一下。配置 laradock1.切换到 laradock 目录中&#xff0c;将 worksp…

.NET 中依赖注入组件 Autofac 的性能漫聊

Autofac 是一款超赞的 .NET IoC 容器 &#xff0c;在众多性能测评中&#xff0c;它也是表现最优秀的一个。它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改。它的实现方式是将常规的.net类当做 组件 处理。简单的性能测试在 LINQPad 中&…

SQLServer事务的隔离级别

事务的隔离级别SQL Server通过在锁资源上使用不同类型的锁来隔离事务。为了开发安全的事务&#xff0c;定义事务内容以及应在何种情况下回滚至关重要&#xff0c;定义如何以及在多长时间内在事务中保持锁定也同等重要。这由隔离级别决定。应用不同的隔离级别&#xff0c;SQL Se…

c语言 extern_Visual C++ 6.0环境中C语言extern 变量使用过程报错

extern 变量称为外部存储变量。extern声明了程序中将要用到但尚未定义的外部变量。本次错误的解决方法同样适用于外部函数。外部函数就是可以被其他源文件调用的函数&#xff0c;定义外部函数时使用extern进行修饰。首先&#xff0c;分别创建两个源文件“ex1.c”和“ex2.c”。其…

怎么删除mysql的所有文件内容_mysql删除全部数据库

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云数据库专家保驾护航&#xff0c;为用户…

盘点大厂的那些开源项目 - 华为

HarmonyOS鸿蒙系统&#xff08;HarmonyOS&#xff09;&#xff0c;是第一款基于微内核的全场景分布式OS&#xff0c;是华为自主研发的操作系统。华为会率先部署在智慧屏、车载终端、穿戴等智能终端上&#xff0c;未来会有越来越多的智能设备使用开源的鸿蒙OS。鸿蒙 OS 底层由鸿…