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

简介: - ILogger 的使用- 日志的 ID- 日志的分类- 日志的级别- LoggerProvider- 日志的最佳实践

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);
    }
}

日志的设计模式

015.jpg

支持不同类型的日志输出,可以自定义一个 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

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
目录
相关文章
|
存储 Cloud Native 数据处理
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
本文整理自阿里云资深技术专家、Apache Flink PMC 成员梅源在 Flink Forward Asia 新加坡 2025上的分享,深入解析 Flink 状态管理系统的发展历程,从核心设计到 Flink 2.0 存算分离架构,并展望未来基于流批一体的通用增量计算方向。
568 0
从嵌入式状态管理到云原生架构:Apache Flink 的演进与下一代增量计算范式
|
9月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
本文内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
742 15
|
9月前
|
运维 监控 Cloud Native
从本土到全球,云原生架构护航灵犀互娱游戏出海
内容整理自「 2025 中企出海大会·游戏与互娱出海分论坛」,灵犀互娱基础架构负责人朱晓靖的演讲内容,从技术层面分享云原生架构护航灵犀互娱游戏出海经验。
|
运维 Cloud Native 测试技术
极氪汽车云原生架构落地实践
随着极氪数字业务的飞速发展,背后的 IT 技术也在不断更新迭代。极氪极为重视客户对服务的体验,并将系统稳定性、业务功能的迭代效率、问题的快速定位和解决视为构建核心竞争力的基石。
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
615 59
|
7月前
|
人工智能 Kubernetes Cloud Native
Higress(云原生AI网关) 架构学习指南
Higress 架构学习指南 🚀写在前面: 嘿,欢迎你来到 Higress 的学习之旅!
2482 0
|
运维 Cloud Native 持续交付
深入理解云原生架构及其在现代企业中的应用
随着数字化转型的浪潮席卷全球,企业正面临着前所未有的挑战与机遇。云计算技术的迅猛发展,特别是云原生架构的兴起,正在重塑企业的IT基础设施和软件开发模式。本文将深入探讨云原生的核心概念、关键技术以及如何在企业中实施云原生策略,以实现更高效的资源利用和更快的市场响应速度。通过分析云原生架构的优势和面临的挑战,我们将揭示它如何助力企业在激烈的市场竞争中保持领先地位。
418 13
|
10月前
|
运维 监控 Cloud Native
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
244 1
|
12月前
|
人工智能 Cloud Native 容灾
深圳农商银行三代核心系统全面投产 以云原生架构筑牢数字化转型基石
深圳农商银行完成第三代核心系统全面上云,日均交易超3000万笔,峰值处理效率提升2倍以上。扎根深圳70余年,与阿里云共建“两地三中心”分布式云平台,实现高可用体系及全栈护航。此次云原生转型为行业提供可复制样本,未来将深化云计算与AI合作,推动普惠金融服务升级。
784 17

热门文章

最新文章