首页 > 其他分享 >.net 温故知新:【9】.NET日志记录 ILogger使用和原理

.net 温故知新:【9】.NET日志记录 ILogger使用和原理

时间:2022-11-14 14:14:34浏览次数:79  
标签:Logging 记录 温故知新 程序 Microsoft Extensions ILogger net 日志

.net 温故知新:【9】.NET日志记录 ILogger使用和原理

 

日志

日志作为我们程序记录的“黑匣子”不论什么系统都应该使用到的,比如我们经常使用的log4net就是第三方日志记录提供程序。.NET 支持使用各种内置和第三方日志记录提供程序的日志记录 API,这篇文章主要介绍的是内置提供程序和API的使用并看下他们是如何实现的。

日志优先级

如果你使用过log4net的话那么你对这个优先级应该不陌生,在日志记录过程中我们可以对记录的日志信息进行优先级划分,根据优先级我们可以配置只记录哪些优先级别的日志,同时日志信息也会标记这条信息的优先级。在我们查找问题的时候更好的筛选和定位。

.net 的日志优先级LogLevel 分为:

Trace = 0、Debug = 1、Information = 2、Warning = 3、Error = 4、Critical = 5 和 None = 6。

日志级别:

Trace<Debug<Information<Warning<Error<Critical<None

使用控制台输出日志

现在我们来感受下如何用内置提供程序记录日志,使用的是.NET 6 控制台程序进行示例。

  • 添加Install-Package Microsoft.Extensions.Logging 日志基础包
    Install-Package Microsoft.Extensions.Logging

  • 添加Microsoft.Extensions.Logging.Console 控制台输出日志提供程序包
    Install-Package Microsoft.Extensions.Logging.Console

  • DI注入

ServiceCollection services = new ServiceCollection();
//添加日志到容器
services.AddLogging(loggingBuilder =>
    {
        loggingBuilder.AddConsole();
    }
    //回调,或者是叫委托方法,调用AddConsole()添加控制台输入提供程序Provider。
    //AddConsole方法就是在Microsoft.Extensions.Logging.Console包中LoggingBuilder的扩展方法。
);

可以通过容器Provider直接获取日志对象然后调用写日志方法。

image

当然更常用的是在其它类中通过构造函数注入,使用 DI 中的 ILogger 对象(TCategoryName 类别字符串是任意的,但约定将使用类名称,在日志中能知道是哪个类输出的)。

    public class TestLog
    {
        private readonly ILogger _logger;
        public TestLog(ILogger<TestLog> logger)
        {
            _logger = logger;
        }

        public void Test()
        {
            _logger.LogDebug("测试");
        }
    }

上面的控制台打印我们注意到没有输出“调试日志”,“信息日志”,这是因为未设置默认日志级别,则默认的日志级别值为 Information。所以输出程序只输出>=Information的日志。

通过代码设置:
image

日志设计的原理

如下我大概画了一个逻辑图,对于如何实现日志进行了一个梳理,代码部分未.net源码截取。

image

通过如上的流程我们知道其实日志对象是由LoggerFactory类创建的,所以我们不使用注入的方式也可以直接获取日志对象并写日志。

            var loggerFactory = LoggerFactory.Create(builder =>
            {
                builder.AddConsole();
                builder.SetMinimumLevel(LogLevel.Debug);
            });

            ILogger loger = loggerFactory.CreateLogger<Program>();

image

提供程序

目前内置的日志记录提供程序:

  • Console:Console 提供程序将输出记录到控制台。
  • Debug:Debug 提供程序使用 System.Diagnostics.Debug 类写入日志输出。
  • EventSource:EventSource 提供程序写入名称为 Microsoft-Extensions-Logging 的跨平台事件源。
  • EventLog:EventLog 提供程序将日志输出发送到 Windows 事件日志。
    比如我们在测试里面添加一个EventLog将日志写入Windows 事件日志:
    安装提供程序包:Install-Package Microsoft.Extensions.Logging.EventLog
    image

内置程序未提供对日志记录到文件,所以我们可以使用一些三方包,当然也可以自己开发。

image
查看地址:三方包

在上一篇 .NET 配置 中我们也见到提供程序这个概念,或者是说这种设计结构,其实.net中很多地方都用到提供程序的思维,然可以灵活扩展。

作者:SunSpring

出处:https://www.cnblogs.com/SunSpring/p/16875968.html

本文版权归作者所有,欢迎转载,但未经作者同意需在文章页面明显位置给出原文链接。

标签:Logging,记录,温故知新,程序,Microsoft,Extensions,ILogger,net,日志
From: https://www.cnblogs.com/sexintercourse/p/16888858.html

相关文章

  • ASP.NET Core中选项的应用和总结
    在前面的文章中,我们介绍过将appsetting等配置文件映射到实体的的方式https://www.cnblogs.com/fei686868/p/16779249.html这里呢,我们介绍关于选项的另一种用法,就是通过IOp......
  • VMware Aria Operations for Networks 6.8 - 网络和应用监控工具
    请访问原文链接:VMwareAriaOperationsforNetworks6.8-网络和应用监控工具,查看最新版。原创作品,转载请保留出处。作者主页:www.sysin.orgVMwareAriaOperationsfo......
  • k8s工作原理(chrono《kubernetes入门实战课》笔记整理)
     【架构理解】k8s可以编排容器,也可以对服务器进行监管。在k8s,不会区分dev(开发人员)和ops(运维人员),而是devops(提倡开发时就要考虑运维,运维也要尽早开始考虑如何对应用进行运......
  • DB2 .NET Data Provider, reason code 10
    最近使用DB2.NETDataProvider访问DB2报了reasoncode10,解决废了很大力气,记录一下错误现象:SQL1159InitializationerrorwithDB2.NETDataProvider,reasoncode......
  • 【NET微服务】微服务简介
    一、什么是微服务微服务是一种架构风格,它要求我们在开发一个应用的时候,这个应用必须构建成一系列小服务的组合;可以通过http的方式进行互通。二、单体应用架构所谓单体应......
  • .net网络请求
    varhttpClient=newHttpClient();//实例化一个请求对象httpClient.DefaultRequestHeaders.Add("Authorization","eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.......
  • 篇(11)-Asp.Net Core入门实战-用户登录,记录Cookie,使用Session
    入门实战-用户登录,记录Cookie,使用Session用户登录功能是做项目开发的必备功能,各个业务点中都要读取和使用用户信息,所以用户登录,并记录用户信息可以使用Cookie,Session等功......
  • .net core iis 部署时通用的web.config配置
    <?xmlversion="1.0"encoding="utf-8"?><configuration><locationpath="."inheritInChildApplications="false"><system.webServer><handlers><add......
  • MES工单工艺线路条码系统NetMVC源码
    概述    系统操作分为两部分:一、生产主管:进入系统设置工单、设置产品扫描工站、设置每个工站扫描的物料条码、维护物料表。二、产线工人:扫描条码。......
  • ASP.NET Core教程-Configuration(配置)-配置运行环境
    更新记录转载请注明出处:2022年11月14日发布。2022年11月12日从笔记迁移到博客。配置运行环境在程序启动时,会读取ASPNETCORE_ENVIRONMENT环境变量的值。如果它的......