DotNetCore Console&Logger
目录
前言
有时候想快速验证一些想法,新建一个控制台来弄,可控制台模板是轻量级的应用程序模板,不具备配置、日志、依赖注入等一些功能。
日志
.Net Core自带了一个基础的logger框架Microsoft.Extensions.Logging提供记录日志功能,能够按日志不同级别记录日志信息(Information, Warning, Error等)。
| LogLevel | 值 | 扩展方法 | 描述 | 
|---|---|---|---|
| Trace | 0 | LogTrace | 追踪:包含最详细的信息。可能包含机密信息。 预设为停用,且不应该在生产环境中启用。 | 
| Debug | 1 | LogDebug | 调试:开发调试并在调试工具中展示。 生产环境中小心使用,日志条数庞大。 | 
| Information | 2 | LogInformation | 信息:跟踪程序执行的一般流程。 可能具有长期值。 | 
| Warning | 3 | LogWarning | 警告:针对异常或或非预期的事件。 通常包含不会导致应用失败的错误或状况。 | 
| Error | 4 | LogError | 错误:发生无法处理的错误或异常。 这些记录表示目前的执行流程或任务失败,但不是整个程序失败。 | 
| Critical | 5 | LogCritical | 严重:发生需要立即关注的失败。 例如:磁盘空间不足。 | 
| None | 6 | 指定记录类别不应写入任何信息。 | 
.Net Core中使用ILogger来记录日志,可以在不同模板应用上使用,如控制台应用,Asp.Net Core,WPF等,Asp.Net Core里使用十分简单,可以直接通过DI注册与获取到ILogger,但在控制台模式中,需要我们自己去配置。
安装Nuget包
新建控制台项目并安装Logger的包,此处使用日志输出渠道为Console中直接展示
Install-Package Microsoft.Extensions.Logging.Console
Logging基础包(Microsoft.Extensions.Logging)在Console已有依赖,此处不再额外安装。同时,Logging基础包中依赖了DI的基础包,使用上极其方便了。

服务注册
将日志服务加入到服务容器中,此处设置Console作为日志输出渠道,还可以设置其他渠道。
https://source.dot.net/#Microsoft.Extensions.Logging/LoggingServiceCollectionExtensions.cs
额外注册了一个OrderJob,用来在OrderJob中输出日志,构建ServiceProvider获取容器提供的服务实例。
var services = new ServiceCollection();
services.AddLogging(configure => configure.AddConsole());
services.AddTransient<OrderJob>();
using (ServiceProvider serviceProvider = services.BuildServiceProvider())
{
    var orderJob = serviceProvider.GetService<OrderJob>()!;
    orderJob.Execute();
}
在OrderJob中通过构造函数注入使用Logger,也可以注入ILoggerFactory创建Logger
public class OrderJob
{
    private readonly ILogger<OrderJob> _logger;
    public OrderJob(ILogger<OrderJob> logger)
    {
        _logger = logger;
    }
    public void Execute()
    {
        _logger.LogInformation("OrderJob Started at {dateTime}", DateTime.UtcNow);
        //Business Logic START
        //Business logic END
        _logger.LogInformation("OrderJob  Ended at {dateTime}", DateTime.UtcNow);
    }
}
如上启动后会输出日志信息到控制台中
 如还设置了其他日志输出渠道,比如写入文件,写入数据库等,则日志记录一并会写入到这些渠道中。
如还设置了其他日志输出渠道,比如写入文件,写入数据库等,则日志记录一并会写入到这些渠道中。
组成部分
.Net Core的日志模型主要由三个核心对象构成,Logger、LoggerProvider和LoggerFactory。
 注册阶段,可将N个LoggerProvider注册到全局LoggerFactory中。
注册阶段,可将N个LoggerProvider注册到全局LoggerFactory中。
 各个LoggerProvider有自己的Logger实现,可以按照已有实现扩展。
各个LoggerProvider有自己的Logger实现,可以按照已有实现扩展。
 使用日志服务时,源码内部从LoggerFactory创建Logger对象(注意这个是Factory的),其创建过程中将LoggerFactory拥有的、已注册的N个Provider组合转换最终得到MessageLogger(这个是Provider中Logger转换过来的)。
使用日志服务时,源码内部从LoggerFactory创建Logger对象(注意这个是Factory的),其创建过程中将LoggerFactory拥有的、已注册的N个Provider组合转换最终得到MessageLogger(这个是Provider中Logger转换过来的)。
 写日志时循环N个MessageLogger(最终还是使用各Provider提供的Logger),满足日志级别,则使用写入日志,不满足则下一个。
写日志时循环N个MessageLogger(最终还是使用各Provider提供的Logger),满足日志级别,则使用写入日志,不满足则下一个。

参考
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/logging/?view=aspnetcore-7.0
https://www.cnblogs.com/artech/p/inside-net-core-logging-2.html
2023-03-15,望技术有成后能回来看见自己的脚步。