当我们利用LoggerFactory创建一个Logger对象并利用它来实现日志记录,这个过程会产生一个日志消息,日志消息的流向取决于注册到LoggerFactory之上的LoggerProvider。说的更加具体一点,日志消息的归宿取决于注册到LoggerFactory的LoggerProvider究竟会提供怎样的Logger。微软提供了一系列原生的LoggerProvider,我们先来认识一下将控制台作为日志输出目的地的ConsoleLoggerProvider。ConsoleLoggerProvider会提供一个名为ConsoleLogger的Logger对象,让后者在进行日志写入的时候会将格式化的日志消息输出到当前控制台上,这两个类型(ConsoleLoggerProvider和ConsoleLogger)均定义在NuGet包“Microsoft.Extensions.Logging.Console”之中。
目录
一、ConsoleLogger
二、ConsoleLogScope
三、ConsoleLoggerProvider
四、扩展方法AddConsole
如下所示的代码片段展示了由ConsoleLoggerProvider提供的这个ConsoleLogger类型的定义。ConsoleLogger具有四个属性,代表Logger名称的Name属性最初由ConsoleLoggerProvider提供,实际上就是LoggerFactory在创建Logger时指定的日志类型。出于对跨平台的支持,ConsoleLogger对不同平台下控制台进行了抽象并使用接口IConsole来表示,所示代码当前控制台的Console属性的类型为IConsole。Func<string, LogLevel, bool>类型的Filter属性提供了一个针对日志类型与等级的过滤条件,是否真正需要将提供的日志消息输出到控制台就由这个过滤条件来决定。最后一个属性IncludeScopes与上面提到的关联多次日志记录的上下文范围有关,我们后续内容中对此进行单独介绍。
class ConsoleLogger : ILogger
2: {
string Name { get; }
public IConsole Console { get; set; }
bool> Filter { get; set; }
bool IncludeScopes { get; set; }
7:
public IDisposable BeginScope<TState>(TState state);
9:
bool IsEnabled(LogLevel logLevel);
string> formatter);
string message);
13: }