.NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记

2.2.2 核心模块--日志

  • ILogger 的使用

  • 日志的 ID

  • 日志的分类

  • 日志的级别

  • LoggerProvider

  • 日志的最佳实践

.NET Core 和 ASP.NET Core 中的日志记录:https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/logging/?view=aspnetcore-5.0

ILogger 的使用

在 Get 方法中添加日志

WeatherForecastController.cs

private readonly ILogger<WeatherForecastController> _logger;public WeatherForecastController(ILogger<WeatherForecastController> logger)
{_logger = logger;
}_logger.LogInformation("Get action executed");

日志的 ID

_logger.LogInformation(new EventId(1001, "Action"), "Get action executed");

日志的分类

根据不同的类名区分

private readonly ILogger<WeatherForecastController> _logger;
private readonly ILogger _myLogger;public WeatherForecastController(ILogger<WeatherForecastController> logger, ILoggerFactory loggerFactory)
{_logger = loggerFactory.CreateLogger<WeatherForecastController>();_myLogger = loggerFactory.CreateLogger("MyLogger");// 通过自己的分类 MyLogger 创建
}

日志的级别

LogLevelValueMethodDescription推荐使用场景
Trace0LogTrace跟踪日志:粒度细,非常详细跟踪日志,包括方法的进入结束。一般是用于sdk、或者一些基础设施上开发环境/特殊环境
Debug1LogDebug调试日志:记录一些比较容易出错的一些跟踪信息开发环境/特殊环境
Information2LogInformation信息:生产级别开启。相对来说比较重要的节点:比如订单支付成功、取消成功生产
Warning3LogWarning警告:有一定错误,但不影响结果执行生产
Error4LogError错误:导致程序不能正常往下执行业务的错误生产
Critical5LogCritical致命:记录信息要求,系统崩溃生产
None6


LoggerProvider

源码:https://github.com/aspnet/Logging/tree/master/src/

ILoggerProvider.cs

using System;namespace Microsoft.Extensions.Logging
{/// <summary>/// Represents a type that can create instances of <see cref="ILogger"/>./// </summary>public interface ILoggerProvider : IDisposable{/// <summary>/// Creates a new <see cref="ILogger"/> instance./// </summary>/// <param name="categoryName">The category name for messages produced by the logger.</param>/// <returns></returns>ILogger CreateLogger(string categoryName);}
}

日志的设计模式

支持不同类型的日志输出,可以自定义一个 LoggerProvider

打印容器中所有注入的 LoggerProvider

Program.cs

var providers = host.Services.GetServices<ILoggerProvider>();// 获取容器中所有注入的实例
foreach (var provider in providers)
{Console.WriteLine(provider.GetType().ToString());
}

启动程序,输出如下:

Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider
Microsoft.Extensions.Logging.Debug.DebugLoggerProvider
Microsoft.Extensions.Logging.EventSource.EventSourceLoggerProvider
Microsoft.Extensions.Logging.EventLog.EventLogLoggerProvider

添加,清除

public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureLogging((ctx, logger) =>{//logger.AddProvider();// 添加logger.ClearProviders();// 清除})

日志的最佳实践

先注释清除代码

//.ConfigureLogging((ctx, logger) =>
//{
//    //logger.AddProvider();// 添加
//    logger.ClearProviders();// 清除
//})

在 appsettings.json 调整日志级别为 Trace

{"Logging": {"LogLevel": {"Default": "Trace","Microsoft": "Trace","Microsoft.Hosting.Lifetime": "Trace"}}
}

在 WeatherForecastController 中添加一个方法,根据需求使用日志

public IActionResult CreateOrder(dynamic order)
{_logger.LogTrace("Enter CreateOrder method");_logger.LogDebug("Start creating order: {0}", "order info");_logger.LogTrace("Start executing _orderService.Create method");if (order.amount <= 0){_logger.LogWarning("Order Amount is:{0}");}_orderService.Create(order);_logger.LogTrace("Completed executing _orderService.Crete method");_logger.LogTrace("Leave CreateOrder Successfully");_logger.LogInformation("Leave CreateOrder Successfully");return Ok();
}

GitHub源码链接:

https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/HelloApi

课程链接

.NET云原生架构师训练营讲什么,怎么讲,讲多久

欢迎各位读者加入微信群一起学习交流,

在公众号后台回复“加群”即可~~

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

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

相关文章

mysql数据库设计三大范式_了解数据库设计三大范式

数据库设计范式什么是范式&#xff1a;简言之就是&#xff0c;数据库设计对数据的存储性能&#xff0c;还有开发人员对数据的操作都有莫大的关系。所以建立科学的&#xff0c;规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范…

使用BeetleX网关部署第三方Web服务

BeetleX的http/ws网关在早期版本可以启动和管理第三方Web服务进程&#xff0c;在最新的1.5版本中引入了文件管理功能&#xff0c;通过这一功能可以对第三方Web服务进行发布管理。加入文件管理后BeetleX的新版本网关服务可以理解为一个简单化的IIS&#xff0c;但它的不同之处是可…

2020.NET开发者大会大会线上同步直播,以及参会秘籍

2020.NET开发者大会马上就要开幕啦&#xff01;你都做好参会准备没有&#xff1f;本届峰会线上分享将在思否和CSDN两个媒体平台同步进行&#xff0c;大家可以选择适合自己的方式在线参与互动哦&#xff01;访问下方链接&#xff0c;可以直接加入直播&#xff1a;思否直播观看地…

C# 9.0中引入的新特性init和record的使用思考

.NET 5.0已经发布&#xff0c;C# 9.0也为我们带来了许多新特性&#xff0c;其中最让我印象深刻的就是init和record type&#xff0c;很多文章已经把这两个新特性讨论的差不多了&#xff0c;本文不再详细讨论&#xff0c;而是通过使用角度来思考这两个特性。initinit是C# 9.0中引…

使用 .NET Core 中的 EventCounters 衡量性能

背景对于每隔几毫秒发生的事件&#xff0c;最好使每个事件的开销较低&#xff08;小于一毫秒&#xff09;。 否则&#xff0c;对性能的影响将很大。 记录事件意味着你将向磁盘写入内容。 如果磁盘不够快&#xff0c;你将丢失事件。 你需要一个解决方案&#xff0c;而不是记录事…

基于 C# 的 ETL 大数据并行编程

作者&#xff1a;James Spinella译者&#xff1a;精致码农原文&#xff1a;https://bit.ly/3nGQu4J并行编程在历史上一直是软件开发中比较小众和复杂的环节&#xff0c;往往不值得头疼。但编写并行化应用只会越来越简单&#xff0c;一个应用同时利用设备 CPU 上的多个内核&…

一个小技巧助您减少if语句的状态判断

在进行项目的开发的过程中&#xff0c; if 语句是少不了的&#xff0c;但我们始终要有一颗消灭 if / else 语句的心。为了消灭if / else 我们引入了 短路器 的概念。短路器 有时候的确能精简我们的代码&#xff0c;但还不够&#xff0c;因此我参考了一个方法来继续消灭一部分 断…

抢先看:笔者亲历的2020年中国.NET开发者大会活动纪实

编者&#xff1a;2020年中国.NET开发者大会第一天活动已经结束&#xff0c;可以通过https://codechina.csdn.net/lives 会看。第二天的Workshop 也有直播哦。12020年12月19日的苏州工业园区&#xff0c;天公作美&#xff0c;阳光明媚&#xff0c;气象迷人&#xff0c;正是一个搞…

python魔术方法由谁定义_Python的魔术方法

魔术方法就是在定义的类中定义一些”不一般”的方法&#xff0c;使类的使用更方便、完善、健壮&#xff0c;是python特有的方法&#xff0c;一般都是前后包含两个下划线__的方法称为魔术方法&#xff0c;例如__new__。基本魔术方法有哪些__new__&#xff1a;是在一个对象实例化…

Swagger在header中添加token

概述平常做项目使用mvcwebapi&#xff0c;采取前后端分离的方式&#xff0c;后台提供API接口给前端开发人员。这个过程中遇到一个问题后台开发人员怎么提供接口说明文档给前端开发人员。为了解决这个问题&#xff0c;项目中引用swagger&#xff08;我比较喜欢戏称为“丝袜哥”&…

如何在 C# 中使用 数据注解

数据注解 是一种可以应用到 类 或者 类成员上用来指定类之间关系的一种 Attribute&#xff0c;它的应用场景比较多&#xff0c;可用来描述 UI 上如何进行数据展示&#xff0c;还可以用来做类属性的规则验证&#xff0c;这篇文章就来讨论为什么 注解 值得你去学习&#xff0c;以…

2020年中国.NET开发者大会第二天 WorkShop

工作坊1&#xff1a;使用 NCF 从 0 到 1 快速模块化开发/部署业务系统实战工作坊简介&#xff1a;本次工作坊由盛派开发团队亲自带领开发者使用 NCF&#xff08;NeuCharFramework&#xff09; 框架进行系统快速开发&#xff0c;进行现场实操训练&#xff0c;大家可以通过本次活…

mysql直接生成excel_MYSQL 将excel里面的数据直接生成sql语句

如何使用EXCEL生成SQL语句&#xff1f;将光标放到新的列上里面&#xff0c;然后在公式栏里面输入如下公式&#xff1a;"insert into t values("&A1&","&B1&","&C1&","&D1&")"效果图&#x…

OrchardCore实现模块化核心原理分析

【导读】ABP vNext并未过多探究&#xff0c;当然其基于DDD理念分层清晰&#xff0c;灵活性、扩展性自然也不在话下&#xff0c;但有些情况下我可能会首选OrchardCore&#xff0c;并非ABP vNext不可若改造项目&#xff0c;也因历史遗留问题&#xff0c;数据库表设计也可能存在不…

.NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记

2.2.3 核心模块--配置IConfigurationOptionsASP.NET Core 中的配置&#xff1a;https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/configuration/?viewaspnetcore-5.0IConfigurationIConfiguration 的使用层级对象配置到 key-value 键值对转换通过环境变量修改日志…

.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统

文章标题&#xff1a;.NET Conf 2020 - 基于ASP.NET Core构建可热插拔的插件化系统作者&#xff1a;Lamond Lu项目地址&#xff1a;https://github.com/lamondlu/CoolCat博客&#xff1a;http://www.cnblogs.com/lwqlun以下是2020.12.19日的演讲文稿和视频&#xff1a;大家好&a…

多款主流编程语言,哪款开发软件最安全?

喜欢就关注我们吧&#xff01;在当下的市场环境中&#xff0c;除了掌握困扰软件的最常见安全问题外&#xff0c;开发人员还应该了解到底是什么问题在影响他们正在使用的编程语言。静态代码分析安全公司 Veracode 最近发布了一份年度软件安全状态&#xff08;SOSS&#xff09;报…

2020年终回顾:时间会回答成长,成长会回答梦想

前言2020年是脚踏实地&#xff0c;慢慢成长的一年&#xff0c;由于疫情的缘故&#xff0c;今年社区没有像去年一样举办多场线下活动&#xff0c;不过 .NET CONF CHINA 大会昨天也在苏州顺利召开&#xff0c;回顾这一年&#xff0c;也有不少惊喜与感悟2020年回顾公众号自从去年双…

java servlet 跳转_Servlet跳转方式sendReDirect()和forward()

在web应用服务中&#xff0c;经常会面对不同SERVLET之间的跳转&#xff0c;目前我们可以通过以下两种方式实现&#xff1a;1.RequestDispatcher.forward()2.ServletResponse.sendReDirect()两者的区别&#xff1a;1.redirect 方式可以跨应用访问,forward 只能在同一个应用中跳转…

明天面腾讯,我刷了这71道面试题...

激动人心的Conf 2020中国.NET开发者大会完美落幕&#xff0c;有幸去到现场&#xff0c;跟诸位.NET大佬、微软大咖、MVP面对面交流&#xff0c;内心很是鸡冻&#xff01;聊天中我注意到一个细节&#xff0c;很多公司的项目都在逐步用MySQL替换SQLServer&#xff0c;尤其是微服务…