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

如何在 ASP.Net Core 中使用 LoggerMessage相关推荐

  1. 如何在 ASP.NET Core 中使用 HttpClientFactory ?

    ASP.Net Core 是一个开源的,跨平台的,轻量级模块化框架,可用它来构建高性能的Web程序,这篇文章我们将会讨论如何在 ASP.Net Core 中使用 HttpClientFactory. ...

  2. 如何在 ASP.Net Core 中使用 Autofac

    依赖注入可以有效的实现对象之间的 松耦合 并能够实现代码的可测试和可维护性,ASP.Net Core 提供了一个极简版的容器实现对 依赖注入 的原生支持,然而内置的依赖注入容器相比成熟的 依赖注入容器 ...

  3. 如何在 ASP.Net Core 中使用 Lamar

    ASP.Net Core 自带了一个极简的 开箱即用 的依赖注入容器,实际上,你还可以使用第三方的 依赖注入容器 来替代它,依赖注入是一种设计模式,它能够有效的实现对象之间的解耦并有利于提高单元测试和 ...

  4. 如何在 ASP.Net Core 中使用 MediatR

    MediatR 是一个 中介者模式 的.NET开源实现, 中介者模式 管控了一组对象之间的相互通讯并有效的减少了对象之间错综复杂的相互依赖,在 中介者模式 中,一个对象不需要直接和另一个对象进行通讯, ...

  5. 如何在 ASP.Net Core 中对接 WCF

    在 REST API 出现之前,SOAP (Simple Object Access Protocol) 一直都是基于 web 的标准协议,虽然现在 REST 大行其道,但在平时开发中总会遇到对接第三 ...

  6. 如何在 ASP.Net Core 中使用 NCache

    虽然 ASP.Net Core 中缺少 Cache 对象,但它引入了三种不同的cache方式. 内存缓存 分布式缓存 Response缓存 Alachisoft 公司提供了一个开源项目 NCache, ...

  7. 如何在 ASP.Net Core 中使用 Configuration Provider

    ASP.NET Core 是一个开源的,跨平台的,精简的模块化框架,可用于构建高性能,可扩展的web应用程序, ASP.NET Core 中的数据配置常用 k-v 的形式存储,值得注意的是,新的数据配 ...

  8. 如何在 ASP.Net Core 中使用 Serilog

    记录日志的一个作用就是方便对应用程序进行跟踪和排错调查,在实际应用上都是引入 日志框架,但如果你的 日志文件 包含非结构化的数据,那么查询起来将是一个噩梦,所以需要在记录日志的时候采用结构化方式. 将 ...

  9. 如何在 ASP.NET Core 中使用 URL Rewriting 中间件

    URL rewriting 是根据预先配置好的一组规则去修改 request url,值得注意的是:URL Rewriting 的重写功能和 url 重定向 是两个概念,本篇我们就来讨论下如何在 AS ...

最新文章

  1. Python游戏开发:最强大脑第一关,数字华容道
  2. python orm peewee
  3. Android MediaRecorder系统结构
  4. js怎么设置z index.html,HTML5 Canvas set z-index
  5. 禁用导航栏的右滑返回实现全屏手势返回
  6. Linux学习 命令部分
  7. Airflow 中文文档:使用systemd运行Airflow
  8. 公司只有1个测试,领导却让我同时操作1000个手机号
  9. java职称考试试题及答案_2017年9月计算机考试Java部分考题预测
  10. 【思路】2021年第十四届“认证杯“数学中国数学建模国际赛(小美赛)思路
  11. 最小二乘法的应用(2015A题A题太阳影子定位)
  12. CMUX协议学习总结
  13. 昌航程序设计竞赛初赛(周五晚19点)
  14. 梵曦诺(莫七七)店铺案例分析
  15. 烤仔的朋友们 | 细数11位身价超十亿美元加密富豪,灰度创始人仅排第七
  16. HBase 数据库检索性能优化策略
  17. 30系列NVIDIA显卡安装tensorflow 极简
  18. 利用word分词来计算文本相似度
  19. Thinkphp5+JWT开发 api接口
  20. bundle initial exceeded maximum budget. Budget 1.00 MB was not met by 642.91 kB with a total of 1.63

热门文章

  1. 第一次作业--四则运算题目生成程序
  2. MongoDB 设置权限认证
  3. 通俗理解T检验与F检验的区别【转】
  4. AMD and CMD are dead之KMD.js依赖可视化工具发布
  5. ZOJ 3228(AC自动机+修改的匹配)
  6. Win2003中apache2整合tomcat5和iis6
  7. win8下cocos2dx3.2移植android平台及代码打包APK
  8. 仿Gin搭建自己的web框架(七)
  9. 个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能...
  10. shell中字符串操作【转】