博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记
阅读量:4037 次
发布时间:2019-05-24

本文共 3479 字,大约阅读时间需要 11 分钟。

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
_logger;public WeatherForecastController(ILogger
logger){ _logger = logger;}_logger.LogInformation("Get action executed");

日志的 ID

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

日志的分类

根据不同的类名区分

private readonly ILogger
_logger;private readonly ILogger _myLogger;public WeatherForecastController(ILogger
logger, ILoggerFactory loggerFactory){ _logger = loggerFactory.CreateLogger
(); _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{    ///     /// Represents a type that can create instances of 
. ///
public interface ILoggerProvider : IDisposable { /// /// Creates a new
instance. ///
/// The category name for messages produced by the logger. ///
ILogger CreateLogger(string categoryName); }}

日志的设计模式

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

打印容器中所有注入的 LoggerProvider

Program.cs

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

启动程序,输出如下:

Microsoft.Extensions.Logging.Console.ConsoleLoggerProviderMicrosoft.Extensions.Logging.Debug.DebugLoggerProviderMicrosoft.Extensions.Logging.EventSource.EventSourceLoggerProviderMicrosoft.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

课程链接

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

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

转载地址:http://pgkdi.baihongyu.com/

你可能感兴趣的文章
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>
iphone开发基础之objective-c学习
查看>>
iphone开发之SDK研究(待续)
查看>>
计算机网络复习要点
查看>>
Variable property attributes or Modifiers in iOS
查看>>
NSNotificationCenter 用法总结
查看>>
C primer plus 基础总结(一)
查看>>
剑指offer算法题分析与整理(一)
查看>>
剑指offer算法题分析与整理(三)
查看>>
Ubuntu 13.10使用fcitx输入法
查看>>
pidgin-lwqq 安装
查看>>
mint/ubuntu安装搜狗输入法
查看>>
C++动态申请数组和参数传递问题
查看>>
opencv学习——在MFC中读取和显示图像
查看>>
retext出现Could not parse file contents, check if you have the necessary module installed解决方案
查看>>
pyQt不同窗体间的值传递(一)——对话框关闭时返回值给主窗口
查看>>
linux mint下使用外部SMTP(如网易yeah.net)发邮件
查看>>