.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,望技术有成后能回来看见自己的脚步
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!