当前位置: 首页 > 科技观察

如何在ASP.NetCore中使用LoggerMessage

时间:2023-03-21 01:34:47 科技观察

ASP.NETCore是一个开源的、跨平台的、轻量级的模块化框架,可以用来构建高性能、可扩展的Web应用程序,你可能不知道ASP有一个.NETCore中隐藏的很深很强大的特性,就是LoggerMessage。与内置的Logger相比,前者具有更高的性能。在本文中,我们将讨论LoggerMessage可以带来哪些好处,以及如何在ASP.NETCore3.0中使用LoggerMessage。LoggerMessageVSLogger与内置的Logger相比,LoggerMessage提供了以下优势。性能LoggerMessage的对象分配和计算开销比Logger小。内置的Logger有装箱操作,而LoggerMessage巧妙地使用静态字段、静态方法和强类型扩展方法来避免装箱开销。解析与Logger相比,LoggerMessage的解析机制更加高效。Logger会在每次写入消息时解析模板,而LoggerMessage只需要在定义消息时解析一次。使用LoggerMessage.Define方法Microsoft.Extensions.Logging命名空间下的LoggerMessage.Define方法可用于高性能日志记录。要使用此方法,您需要指定正确的强类型参数。下面是LoggerHelper.Define()的源码定义接下来我们看一下LoggerMessage.Define方法的使用方法,首先定义一个静态的LoggerExtensions类,如下代码所示:internalstaticclassLoggerExtensions{}接下来,创建一个用于日志记录的扩展方法,内部使用了LoggerMessage.Define方法,代码如下:.Define(LogLevel.Error,newEventId(1234,nameof(NotFound)),"Therecordisnotfound:{Id}");}在Action中使用LoggerMessage然后在默认的HomeController.Index()方法,如下代码所示:publicclassHomeController:Controller{privatereadonlyILogger_logger;publicHomeController(ILoggerlogger){_logger=logger;}publicIActionResultIndex(){_logger.RecordNotFound(1);returnView();}}internalstaticclassLoggerExtensions{publicstaticFoidRecordNotlog)=>NotFound(logger,id,null);privatestaticreadonlyActionnNotFound=LoggerMessage.Define(LogLevel.Error,newEventId(1234,nameof(NotFound)),"Therecordisnotfound:{Id}");}LoggerMessage.Define可以用来创建Log消息委托,这种方法比内置的Logger性能更高,最后你可以在https://docs.microsoft.com/en-us/aspnet/core/fundamentals/logging/loggermessage?view=了解更多关于LoggerMessageonaspnetcore-3.1知识翻译链接:https://www.infoworld.com/article/3535790/how-to-use-loggermessage-in-aspnet-core-30.html