日志日志作为我们程序记录的“黑匣子”是不论什么系统都会使用到的 , 比如我们经常使用的log4net就是第三方日志记录提供程序 。NET 支持使用各种内置和第三方日志记录提供程序的日志记录 API , 这篇文章主要介绍的是内置提供程序和API的使用 。
日志优先级如果你使用过log4net的话那么你对这个优先级应该不陌生 , 在日志记录过程中我们可以对记录的日志信息进行优先级划分 , 根据优先级我们可以配置只记录哪些优先级别的日志 , 同时日志信息也会标记这条信息的优先级 。在我们查找问题的时候更好的筛选和定位 。.net 的日志优先级LogLevel 分为:Trace = 0、Debug = 1、Information = 2、Warning = 3、Error = 4、Critical = 5 和 None = 6 。日志级别:Trace<Debug<Information<Warning<Error<Critical<None
使用控制台输出日志现在我们来感受下如何记录输出日志 , 用控制台程序进行示例 。
- 添加Install-Package Microsoft.Extensions.Logging 日志基础包
Install-Package Microsoft.Extensions.Logging
- 添加Microsoft.Extensions.Logging.Console 控制台输出日志提供程序包
Install-Package Microsoft.Extensions.Logging.Console
- DI注入
ServiceCollection services = new ServiceCollection();//添加日志到容器services.AddLogging(loggingBuilder =>{loggingBuilder.AddConsole();}//回调 , 或者是叫委托方法 , 调用AddConsole()添加控制台输入提供程序Provider 。//AddConsole方法就是在Microsoft.Extensions.Logging.Console包中LoggingBuilder的扩展方法 。);
可以通过容器Provider直接获取对象然后调用写日志方法 。【.net 温故知新:【9】.NET日志记录 ILogger使用和原理】
文章插图
当然更常用的是在其它类中使用时通过构造函数注入 , 使用 DI 中的 ILogger 对象(TCategoryName 类别字符串是任意的 , 但约定将使用类名称 , 在日志中能知道是哪个类输出的) 。上面的控制台打印我们注意到没有“调试日志” , “信息日志”的输出 , 这个是因为未设置默认日志级别 , 则默认的日志级别值为 Information 。所以只输出>=Information的日志 。
通过代码设置:
文章插图
日志设计的原理如下我大概画了一个逻辑图 , 对于如何实现日志进行了一个梳理 , 代码部分未.net源码截取 。
文章插图
通过如上的流程我们知道其实日志对象是由
LoggerFactory
类创建的 , 所以我们不使用注入的方式也可以直接获取日志对象并写日志 。var loggerFactory = LoggerFactory.Create(builder =>{builder.AddConsole();builder.SetMinimumLevel(LogLevel.Debug);});ILogger loger = loggerFactory.CreateLogger<Program>();
文章插图
提供程序目前内置的日志记录提供程序:
- Console:Console 提供程序将输出记录到控制台 。
- Debug:Debug 提供程序使用 System.Diagnostics.Debug 类写入日志输出 。
- EventSource:EventSource 提供程序写入名称为 Microsoft-Extensions-Logging 的跨平台事件源 。
- EventLog:EventLog 提供程序将日志输出发送到 Windows 事件日志 。比如我们在测试里面添加一个EventLog将日志写入Windows 事件日志:安装提供程序包:
经验总结扩展阅读
- 【k8s连载系列】2. k8s整体架构
- 斯洛文尼亚是哪个国家
- 2023年农历七月廿四搬迁吉日 2023年9月8日搬迁吉日一览表
- 白山茶指什么女孩子
- 海龟是两栖动物吗
- 孟县属于哪个省哪个市
- 5一6级风能出门吗
- 小白鞋变黄怎么洗干净
- 盒装牛奶怎么加热
- 裙带菜是海鲜吗