首页 > 其他分享 >dotnet logAddConsole方法

dotnet logAddConsole方法

时间:2024-02-09 23:12:59浏览次数:30  
标签:AddConsoleFormatter builder ILoggingBuilder AddConsole logAddConsole dotnet 日志 

AddConsole方法

// Summary:
//     Adds a console logger named 'Console' to the factory.
//
// Parameters:
//   builder:
//     The Microsoft.Extensions.Logging.ILoggingBuilder to use.
[UnconditionalSuppressMessage("ReflectionAnalysis", "IL2026:RequiresUnreferencedCode", Justification = "AddConsoleFormatter and RegisterProviderOptions are only dangerous when the Options type cannot be statically analyzed, but that is not the case here. The DynamicallyAccessedMembers annotations on them will make sure to preserve the right members from the different options objects.")]
public static ILoggingBuilder AddConsole(this ILoggingBuilder builder)
{
    builder.AddConfiguration();
    builder.AddConsoleFormatter<JsonConsoleFormatter, JsonConsoleFormatterOptions>();
    builder.AddConsoleFormatter<SystemdConsoleFormatter, ConsoleFormatterOptions>();
    builder.AddConsoleFormatter<SimpleConsoleFormatter, SimpleConsoleFormatterOptions>();
    builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<ILoggerProvider, ConsoleLoggerProvider>());
    LoggerProviderOptions.RegisterProviderOptions<ConsoleLoggerOptions, ConsoleLoggerProvider>(builder.Services);
    return builder;
}
  1. AddConsole 是 Microsoft.Extensions.Logging.ILoggingBuilder 接口的一个扩展方法,它用于向日志服务中添加一个名为 Console 的控制台日志提供程序¹²。控制台日志提供程序可以将日志消息输出到标准输出或标准错误流中³。

  2. AddConsole 方法有一个参数:

  • builder: 这是一个 ILoggingBuilder 类型的参数,它表示一个用于配置日志服务的对象。你可以使用 this 关键字来调用 AddConsole 方法,例如 builder.AddConsole()。
  1. AddConsole 方法的返回值是一个 ILoggingBuilder 类型的对象,也就是 builder 参数本身。这样做的目的是为了支持链式调用,也就是可以在一行代码中连续调用多个 ILoggingBuilder 的扩展方法,例如 builder.AddConsole().AddDebug()。

  2. AddConsole 方法的内部逻辑是:

builder.AddConfiguration();
builder.AddConsoleFormatter<JsonConsoleFormatter, JsonConsoleFormatterOptions>();
builder.AddConsoleFormatter<SystemdConsoleFormatter, ConsoleFormatterOptions>();
builder.AddConsoleFormatter<SimpleConsoleFormatter, SimpleConsoleFormatterOptions>();
builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<ILoggerProvider, ConsoleLoggerProvider>());
LoggerProviderOptions.RegisterProviderOptions<ConsoleLoggerOptions, ConsoleLoggerProvider>(builder.Services);
  • 首先调用 builder.AddConfiguration() 方法,将 appsettings.json 文件中的 Logging 配置节应用到日志服务中。这样可以让你在配置文件中设置日志服务的选项,例如日志级别、日志格式、日志输出目标等⁴。

  • 然后调用 builder.AddConsoleFormatter<TFormatter, TOptions>() 方法,向日志服务中添加三种不同的控制台日志格式化器,分别是 JsonConsoleFormatter、SystemdConsoleFormatter 和 SimpleConsoleFormatter。
    这些格式化器可以让你以不同的格式输出日志消息,例如 JSON 格式、Systemd 格式或简单格式⁵。你可以在配置文件中指定使用哪种格式化器,或者在代码中传递一个配置委托来设置格式化器的选项。

  • 接着调用 builder.Services.TryAddEnumerable(...) 方法,向服务容器中添加一个单例服务,也就是 ConsoleLoggerProvider。
    ConsoleLoggerProvider 是一个实现了 ILoggerProvider 接口的类,它负责创建和管理 ConsoleLogger 对象。
    ConsoleLogger 是一个实现了 ILogger 接口的类,它负责记录和输出日志消息。
    TryAddEnumerable 方法会检查服务容器中是否已经存在相同的服务,如果不存在,则添加,如果存在,则忽略。

  • 然后调用 LoggerProviderOptions.RegisterProviderOptions<TOptions, TProvider>(...) 方法,向服务容器中注册一个配置选项,也就是 ConsoleLoggerOptions。ConsoleLoggerOptions 是一个用于设置控制台日志提供程序的选项的类,例如 DisableColors、 TimestampFormat、 FormatterName 等。你可以在配置文件中设置这些选项,或者在代码中传递一个配置委托来设置这些选项。

  • 最后返回 builder 参数本身,以便于链式调用。

标签:AddConsoleFormatter,builder,ILoggingBuilder,AddConsole,logAddConsole,dotnet,日志,
From: https://www.cnblogs.com/zhuoss/p/18012677

相关文章

  • dotnet 接口的扩展方法 logger
    AddLogging的使用services.AddLogging(logBuilder=>{logBuilder.AddConsole();});AddLogging的实现publicstaticIServiceCollectionAddLogging(thisIServiceCollectionservices,Action<ILoggingBuilder>configure){//...}实现ILoggingBuilder的AddCo......
  • JAVA构造方法
    构造方法介绍语法使用细节关于在继承中新增的构造方法使用细节1子类必须要调用父类的构造器,完成父类的初始化2父类构造器的调用不限于直接父类!将一直往上追溯直到Object类(顶级父类)3当创建子类对象时,不管使用的是子类的哪个构造器,默认情况下总会调用父类......
  • dotnet 依赖注入 注入方式
    依赖注入的基本使用1/Program.csusingMicrosoft.Extensions.DependencyInjection;ServiceCollectionservices=newServiceCollection();//AddTransient的两种方式//services.AddTransient<ITestService,TestServiceImpl>();//services.AddTransient(typeof(ITestSer......
  • dotnet 依赖注入 服务定位器
    依赖注入的基本使用1/Program.csusingMicrosoft.Extensions.DependencyInjection;ServiceCollectionservices=newServiceCollection();//瞬态服务services.AddTransient<TestServiceImpl>();//=>false//作用域服务//services.AddScoped<TestServiceImpl>();......
  • client-go 分析Shutdown方法耗时长原因
    k8sv1.19.0Shutdown等待结束流程第1步:reflector停止list/watch第2步:Delta先进先出队列对象全部Pop业务代码处理事件场景1:Shutdown方法等待EventHandler回调方法完成klog.InitFlags(nil)flag.Parse()deferklog.Flush()cfg,err:=clientcmd.BuildConfigFromFlags(......
  • [Kyana]ffmpeg编译方法
    01|Msys跨平台编译ffmpeg配置环境安装Msys2,修改安装目录下的/etc/pacman.d/文件夹下的mirrorlist文件,切换为中科大源。打开Msys2的MinGW64终端,执行pacman-Syu更新软件包使用pacman-Sgccyasmmake安装编译所需的依赖。编译流程编译x264库从videolan官网下载x264代码......
  • [Kyana]ffmpeg编译方法
    01|Msys跨平台编译ffmpeg配置环境安装Msys2,修改安装目录下的/etc/pacman.d/文件夹下的mirrorlist文件,切换为中科大源。打开Msys2的MinGW64终端,执行pacman-Syu更新软件包使用pacman-Sgccyasmmake安装编译所需的依赖。编译流程编译x264库从videolan官网下载x264代码......
  • 创新指南|生成式AI实验 - 企业快速渐进采用人工智能的科学新方法
    生成式人工智能(GenAI)正迅速成为各行各业的企业创新焦点。生成式AI实验对于企业创新而言至关重要,不仅可以帮助企业识别最适合和最有影响的应用场景,还能促进组织沿着生成式AI学习曲线前进,建立早期的创新领导者和AI人才梯队,为未来的AI创新发展奠定基础。企业应谨慎选择AI实验起......
  • 激光雷达和相机传感器装置的自动外部校准方法(上)
    激光雷达和相机传感器装置的自动外部校准方法(上)AutomaticExtrinsicCalibrationMethodforLiDARandCameraSensorSetups摘要——用于机载自主感知的大多数传感器设置由激光雷达和视觉系统组成,因为它们提供了互补信息,提高了获得稳健场景理解所需的不同算法的可靠性。然而,有......
  • OI 方法论
    OI方法论分析问题性质问题建模加速求解c++语言实现分析问题性质二选一:2-sat区间问题:树状数组,线段树(优化建图),前缀和,差分最大的最小值,最小的最大值:二分答案多个状态的值:可持久化数据结构往往找出问题性质,是解题的突破口性质的工具——美妙的数学注意不等式两边同乘负......