.NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记
2020-12-15 23:28
806 查看
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 创建 }
日志的级别
LogLevel | Value | Method | Description | 推荐使用场景 |
---|---|---|---|---|
Trace | 0 | LogTrace | 跟踪日志:粒度细,非常详细跟踪日志,包括方法的进入结束。一般是用于sdk、或者一些基础设施上 | 开发环境/特殊环境 |
Debug | 1 | LogDebug | 调试日志:记录一些比较容易出错的一些跟踪信息 | 开发环境/特殊环境 |
Information | 2 | LogInformation | 信息:生产级别开启。相对来说比较重要的节点:比如订单支付成功、取消成功 | 生产 |
Warning | 3 | LogWarning | 警告:有一定错误,但不影响结果执行 | 生产 |
Error | 4 | LogError | 错误:导致程序不能正常往下执行业务的错误 | 生产 |
Critical | 5 | LogCritical | 致命:记录信息要求,系统崩溃 | 生产 |
None | 6 |
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
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
相关文章推荐
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 聚合)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB API重构)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 EF Core 介绍)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 REST && RESTful)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 路由与终结点)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 更新和删除)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 HTTP管道与中间件)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 MySQL环境准备)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 EF Core 关系)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 配置)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 MVC终结点)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 RabbitMQ HelloWorld)--学习笔记
- .NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记
- python 0基础学习笔记7:递归、栈、队列、时间模块
- 微软企业库4.1学习笔记(三十七)日志模块 在应用中使用日志模块
- python基础学习笔记<内建模块与第三方模块>
- PaddlePaddle-百度架构师手把手带你零基础实践深度学习-笔记01(代码详解)
- node学习笔记02(模块和包管理器基础了解)
- .Net学习笔记----2015-07-21(C#基础复习04,面向对象语法和继承复习)
- JAVA并发编程学习笔记------基础构建模块