前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NET 云原生架构师训练营(模块二 基础巩固 日志)--学习笔记

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

作者头像
郑子铭
发布2021-01-13 15:55:55
2170
发布2021-01-13 15:55:55
举报

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

代码语言:javascript
复制
private readonly ILogger<WeatherForecastController> _logger;

public WeatherForecastController(ILogger<WeatherForecastController> logger)
{
    _logger = logger;
}

_logger.LogInformation("Get action executed");

日志的 ID

代码语言:javascript
复制
_logger.LogInformation(new EventId(1001, "Action"), "Get action executed");

日志的分类

根据不同的类名区分

代码语言:javascript
复制
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

代码语言:javascript
复制
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

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

启动程序,输出如下:

代码语言:javascript
复制
Microsoft.Extensions.Logging.Console.ConsoleLoggerProvider
Microsoft.Extensions.Logging.Debug.DebugLoggerProvider
Microsoft.Extensions.Logging.EventSource.EventSourceLoggerProvider
Microsoft.Extensions.Logging.EventLog.EventLogLoggerProvider

添加,清除

代码语言:javascript
复制
public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureLogging((ctx, logger) =>
        {
            //logger.AddProvider();// 添加
            logger.ClearProviders();// 清除
        })

日志的最佳实践

先注释清除代码

代码语言:javascript
复制
//.ConfigureLogging((ctx, logger) =>
//{
//    //logger.AddProvider();// 添加
//    logger.ClearProviders();// 清除
//})

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

代码语言:javascript
复制
{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Trace",
      "Microsoft.Hosting.Lifetime": "Trace"
    }
  }
}

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

代码语言:javascript
复制
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云原生架构师训练营讲什么,怎么讲,讲多久

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 2.2.2 核心模块--日志
    • ILogger 的使用
      • 日志的 ID
        • 日志的分类
          • 日志的级别
            • LoggerProvider
              • 日志的设计模式
            • 日志的最佳实践
              • GitHub源码链接:
              • 课程链接
              相关产品与服务
              日志服务
              日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档