知行合一|

hiwwwk

园龄:5年1个月粉丝:4关注:12

2022-02-09 00:00阅读: 92评论: 0推荐: 0

19 | 日志作用域:解决不同请求之间的日志干扰

日志作用域的场景


  • 一个事务包含多条操作时
  • 复杂流程的日志关联时
  • 调用点追踪与请求处理过程对应时

示例


继续沿用上一节代码,稍微做一些修改

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;

namespace LoggingSimpleDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 利用之前的方式加载json配置
            var builder = new ConfigurationBuilder();
            builder.AddJsonFile("appsettings.json", false, true);
            var config = builder.Build();

            IServiceCollection servicesCollection = new ServiceCollection();
            // 使用工厂模式将配置对象注册到容器管理
            servicesCollection.AddSingleton<IConfiguration>(p => config);

            servicesCollection.AddLogging(builder =>
            {
                builder.AddConfiguration(config.GetSection("Logging"));
                builder.AddConsole();
                builder.AddDebug();
            });

            IServiceProvider services = servicesCollection.BuildServiceProvider();

            var logger = services.GetService<ILogger<Program>>();
            // 创建一个BeginScope,泛型方法BeginScope<TState>为多次相关的日志记录操作创建一个相同的执行上下文范围,并将其上下文范围与一个TState对象进行关联。
            using (logger.BeginScope("ScopeId : {id}",Guid.NewGuid()))
            {
                logger.LogInformation("Scope.Info");
                logger.LogError("Scope.Error");
            }

            Console.ReadKey();
        }
    }
}

创建一个BeginScope,泛型方法BeginScope<TState>为多次相关的日志记录操作创建一个相同的执行上下文范围,并将其上下文范围与一个TState对象进行关联。
并在配置文件**appsettings.json****Console**下添加**"IncludeScopes": true,**

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    },
    "Console": {
      "IncludeScopes": true,
      "LogLevel": {
        "Default": "Information",
        "Program": "Trace",
        "alogger": "Information",
        "LoggingSimpleDemo.OrderService": "Trace"
      }
    }
  }
}

这时候执行代码:image.png
然后我们将代码其改成循环输出的

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using System.Threading;

namespace LoggingSimpleDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            // 利用之前的方式加载json配置
            var builder = new ConfigurationBuilder();
            builder.AddJsonFile("appsettings.json", false, true);
            var config = builder.Build();

            IServiceCollection servicesCollection = new ServiceCollection();
            // 使用工厂模式将配置对象注册到容器管理
            servicesCollection.AddSingleton<IConfiguration>(p => config);

            servicesCollection.AddLogging(builder =>
            {
                builder.AddConfiguration(config.GetSection("Logging"));
                builder.AddConsole();
                builder.AddDebug();
            });

            IServiceProvider services = servicesCollection.BuildServiceProvider();

            var logger = services.GetService<ILogger<Program>>();

            while (Console.ReadKey().Key != ConsoleKey.Escape)
            {
                // 创建一个BeginScope,泛型方法BeginScope<TState>为多次相关的日志记录操作创建一个相同的执行上下文范围,并将其上下文范围与一个TState对象进行关联。
                using (logger.BeginScope("ScopeId : {id}", Guid.NewGuid()))
                {
                    logger.LogInformation("Scope.Info");
                    logger.LogError("Scope.Error");
                }
                // 日志输出内部时异步的,需要等待以下保证输出顺序正确
                Thread.Sleep(200);
                Console.WriteLine("=============================================");
            }
        }
    }
}

每次输出如下
image.png
这是,我们手动改一下配置,将**IncludeScopes: true**改为**false**,再按回车
image.png
可以看到输出发生了变化,也就意味着我们可以使用配置热更新的能力。


.NET Core Web中可以在配置中添加**IncludeScopes: true**输出日志的时候,可以包含信息帮助我们把日志串联起来

本文作者:hiwwwk

本文链接:https://www.cnblogs.com/wwwk/p/15873395.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   hiwwwk  阅读(92)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起