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;
}
-
AddConsole 是 Microsoft.Extensions.Logging.ILoggingBuilder 接口的一个扩展方法,它用于向日志服务中添加一个名为 Console 的控制台日志提供程序¹²。控制台日志提供程序可以将日志消息输出到标准输出或标准错误流中³。
-
AddConsole 方法有一个参数:
- builder: 这是一个 ILoggingBuilder 类型的参数,它表示一个用于配置日志服务的对象。你可以使用 this 关键字来调用 AddConsole 方法,例如 builder.AddConsole()。
-
AddConsole 方法的返回值是一个 ILoggingBuilder 类型的对象,也就是 builder 参数本身。这样做的目的是为了支持链式调用,也就是可以在一行代码中连续调用多个 ILoggingBuilder 的扩展方法,例如 builder.AddConsole().AddDebug()。
-
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 参数本身,以便于链式调用。