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

共 2951字,需浏览 6分钟

 ·

2020-12-18 12:53

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 创建
}

日志的级别

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
{
///
/// 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.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云原生架构师训练营讲什么,怎么讲,讲多久


欢迎各位读者加入微信群一起学习交流,
在公众号后台回复“加群”即可~~


浏览 49
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报