如何在 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,一经查实,立即删除!

相关文章

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

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

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

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

【Vscode】调试DotNet Core代码

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

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

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

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…

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 中&…

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

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

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

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

ubuntu mysql怎么备份_Ubuntu下MySQL备份与异地备份

下面是一则MySQL备份实例&#xff0c;在Ubuntu下测试通过。完成任务是本地备份。可用于服务器端。#! /bin/bashecho "backupmysql V1.0"###date stamp###datestamp$(date %Y-%m-%d)###path ###startdir/home/user/mysqlbackup###bakfile prefix###fileprefixsqlecho …

java 位运算_java学习之运算符与表达式(四)

(6)位运算符位运算是指对整数按二进制的位进行运算。位运算用于整数或字符类型。有7个&#xff1a;~(非)、&(与)、&#xff5c;(或)、^(异或)、<>(右移)、>>>(无符号右移)。例&#xff1a;以byte类型4为例。byte类型占用1个字节。4的二进制为&#xff1a;00…

【Http】一文备忘Http状态码(406,415,422)

最近在调试接口时&#xff0c;web api 报了一个415状态码。好久没见到这个状态码&#xff0c;一时还真不知道啥情况。所以&#xff0c;人的大脑是有遗忘规律的&#xff0c;为了加深印象&#xff0c;所以我觉得我有必要再复习一下。1.HTTP的状态码 首先复习一下所有的状态码。1x…

infor wms 项目启动_广汽本田增城工厂No.2L WMS项目正式启动

Warehouse导读&#xff1a;近日&#xff0c;在生管科No.2L办公室&#xff0c;广汽本田增城工厂No.2L WMS项目启动大会如期召开。生产管理科&#xff0c;IT科&#xff0c;FNL以及汉得信息有限公司的WMS项目组成员参加了本次启动大会。Management2018年10月&#xff0c;生管科已经…

mysql动态扩展_动态可扩展查询MYSQL5.7JSON+虚拟列+Mybatis

背景&#xff1a;现有业务扩展字段&#xff0c;都存在feature字段&#xff0c;存在语义不清晰以及&#xff0c;难以利用索引查询问题Mysql 5.7后推出利器&#xff0c;JSON虚拟列&#xff0c;即实现了业务语义统一&#xff0c;也支持索引查询加速一、简单描述MySQL 5.7.7 labs版…

asp.net core安全事项(中)

上传文件上传文件是造成风险的很大因素&#xff0c;所以对上传文件进行处理是重要的&#xff0c;首先要处理的是&#xff1a;a、上传文件大小限制&#xff1b;b、上传文件类型(能过扩展或&#xff0c;或文件头)限制&#xff1b;c、上传的名称要替换掉&#xff1b;d、上传的文件…

http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析

上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF&#xff0c;很多客户找到我们想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性更加坚固,对此提醒大家渗透测试网站必须要拿到授权才能测试哦&#xff01;3.…

如何手动连上mysql_如何手动安装MySql

想安装当然要先有一个MySql的安装包 这里使用的是mysql-5.7.12-winx64安装包百度云&#xff1a;http://pan.baidu.com/s/1kVAuXuv       密码&#xff1a;hr391.要将压缩包解压到你的指定位置(最好将要用的工具文件分类放好)例如&#xff1a;D:javaAppmysql-5.7.12-winx6…

WebRTC成为W3C和IETF正式标准

喜欢就关注我们吧&#xff01;2021年1月26日&#xff0c;W3C&#xff08;万维网联盟&#xff09;和 IETF &#xff08;互联网工程任务组&#xff09;同时宣布 WebRTC&#xff08;Web Real-Time Communications&#xff0c;Web 实时通信&#xff09;现发布为正式标准&#xff0c…