.Net Core 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中。

图片

各个LoggerProvider有自己的Logger实现,可以按照已有实现扩展。

图片

使用日志服务时,源码内部从LoggerFactory创建Logger对象(注意这个是Factory的),其创建过程中将LoggerFactory拥有的、已注册的N个Provider组合转换最终得到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,望技术有成后能回来看见自己的脚步

posted @ 2023-03-15 08:06  微笑刺客D  阅读(320)  评论(0编辑  收藏  举报
返回顶部