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

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: - 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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
20天前
|
Cloud Native 安全 数据安全/隐私保护
云原生架构下的微服务治理与挑战####
随着云计算技术的飞速发展,云原生架构以其高效、灵活、可扩展的特性成为现代企业IT架构的首选。本文聚焦于云原生环境下的微服务治理问题,探讨其在促进业务敏捷性的同时所面临的挑战及应对策略。通过分析微服务拆分、服务间通信、故障隔离与恢复等关键环节,本文旨在为读者提供一个关于如何在云原生环境中有效实施微服务治理的全面视角,助力企业在数字化转型的道路上稳健前行。 ####
|
2天前
|
Kubernetes Cloud Native 微服务
探索云原生技术:容器化与微服务架构的融合之旅
本文将带领读者深入了解云原生技术的核心概念,特别是容器化和微服务架构如何相辅相成,共同构建现代软件系统。我们将通过实际代码示例,探讨如何在云平台上部署和管理微服务,以及如何使用容器编排工具来自动化这一过程。文章旨在为开发者和技术决策者提供实用的指导,帮助他们在云原生时代中更好地设计、部署和维护应用。
|
5天前
|
弹性计算 运维 Cloud Native
云原生架构的崛起与未来展望
在数字化转型的浪潮中,云原生架构凭借其高效、灵活和可扩展的特性,正逐渐成为企业IT战略的核心。本文旨在探讨云原生架构的定义、关键特性、实施优势以及面临的挑战,同时展望未来的发展趋势。通过深入分析,我们期望为读者提供一个关于云原生架构全面而深入的视角,助力企业在云计算时代做出更明智的决策。
16 3
|
17天前
|
Cloud Native 云计算 Docker
云原生技术的崛起:从容器化到微服务架构
云原生技术的崛起:从容器化到微服务架构
|
20天前
|
Cloud Native 安全 API
云原生架构下的微服务治理策略与实践####
—透过云原生的棱镜,探索微服务架构下的挑战与应对之道 本文旨在探讨云原生环境下,微服务架构所面临的关键挑战及有效的治理策略。随着云计算技术的深入发展,越来越多的企业选择采用云原生架构来构建和部署其应用程序,以期获得更高的灵活性、可扩展性和效率。然而,微服务架构的复杂性也带来了服务发现、负载均衡、故障恢复等一系列治理难题。本文将深入分析这些问题,并提出一套基于云原生技术栈的微服务治理框架,包括服务网格的应用、API网关的集成、以及动态配置管理等关键方面,旨在为企业实现高效、稳定的微服务架构提供参考路径。 ####
42 5
|
21天前
|
Kubernetes 负载均衡 Cloud Native
云原生架构下的微服务治理策略
随着云原生技术的不断成熟,微服务架构已成为现代应用开发的主流选择。本文探讨了在云原生环境下实施微服务治理的策略和方法,重点分析了服务发现、负载均衡、故障恢复和配置管理等关键技术点,以及如何利用Kubernetes等容器编排工具来优化微服务的部署和管理。文章旨在为开发者提供一套实用的微服务治理框架,帮助其在复杂的云环境中构建高效、可靠的分布式系统。
32 5
|
21天前
|
负载均衡 监控 Cloud Native
云原生架构下的微服务治理策略与实践####
在数字化转型浪潮中,企业纷纷拥抱云计算,而云原生架构作为其核心技术支撑,正引领着一场深刻的技术变革。本文聚焦于云原生环境下微服务架构的治理策略与实践,探讨如何通过精细化的服务管理、动态的流量调度、高效的故障恢复机制以及持续的监控优化,构建弹性、可靠且易于维护的分布式系统。我们将深入剖析微服务治理的核心要素,结合具体案例,揭示其在提升系统稳定性、扩展性和敏捷性方面的关键作用,为读者提供一套切实可行的云原生微服务治理指南。 ####
|
21天前
|
消息中间件 缓存 Cloud Native
云原生架构下的性能优化实践与挑战####
随着企业数字化转型的加速,云原生架构以其高度解耦、弹性伸缩和快速迭代的特性,成为现代软件开发的首选模式。本文深入探讨了云原生环境下性能优化的关键策略与面临的主要挑战,通过案例分析,揭示了如何有效利用容器化、微服务、动态调度等技术手段提升应用性能,同时指出了在复杂云环境中确保系统稳定性和高效性的难题,为开发者和架构师提供了实战指南。 ####
31 3
|
21天前
|
Kubernetes Cloud Native 持续交付
云原生技术在现代应用架构中的实践与思考
【10月更文挑战第38天】随着云计算的不断成熟和演进,云原生(Cloud-Native)已成为推动企业数字化转型的重要力量。本文从云原生的基本概念出发,深入探讨了其在现代应用架构中的实际应用,并结合代码示例,展示了云原生技术如何优化资源管理、提升系统弹性和加速开发流程。通过分析云原生的优势与面临的挑战,本文旨在为读者提供一份云原生转型的指南和启示。
33 3
|
21天前
|
运维 Kubernetes Cloud Native
云原生技术在现代应用架构中的实践与挑战####
本文深入探讨了云原生技术的核心概念、关键技术组件及其在实际项目中的应用案例,分析了企业在向云原生转型过程中面临的主要挑战及应对策略。不同于传统摘要的概述性质,本摘要强调通过具体实例揭示云原生技术如何促进应用的灵活性、可扩展性和高效运维,同时指出实践中需注意的技术债务、安全合规等问题,为读者提供一幅云原生技术实践的全景视图。 ####