.net core 日志引擎

ILogger接口与使用

https://github.com/aspnet/Logging core 日志项目地址

1.配置IDE可调试core 源码

  • .net core源码都是开放的,配置的目的是为了调试的时候可以直接步进.core源码,方便查看框架内部实现方式。
enter image description here
enter image description here
  • 效果
image

2.日志记录器简单使用

2.1 配置日志提供器

enter image description here

2.2 注入需要记录日志的地方

enter image description here

2.3 运行结果

enter image description here

3. .net Core 日志三大接口探究

  • ILogger 日子记录器
  • ILoggerFactory 日志记录器工厂
  • ILoggerProvider 日志记录器提供器

他们的关系是 ILoggerFactory 根据日志类型(categoryName)调用 对应的 ILoggerProvider 获取 ILogger

3.1 探究ILoggerFactory 来源

  • IWebHostBuilder.Build() -> BuildCommonServices() -> AddLogging() 应用初始化的时候就把ILoggerFactory 托管给了DI,


    image
  • 所以可以在Start.Configure() 方法中直接注入ILoggerFactory(ps:这个方法非常特殊,这方法的参数可以无穷多个,但是每个参数都必须是DI托管的对象。)


    enter image description here

3.2 ILoggerProvider 重要也不重要,提供器主要的作用就是创建Logger。

image

3.3 Logger 主要干活的

3.3.1 探究注入到Controller的ILooger到底是哪个Logger?难道只是某一个提供器生成Logger对象?

image
  • 首先看看到底是哪个ILogger的托管到了容器里(Provider生成Logger对象并没有托管给容器,所以容器注入的Logger肯定不是日志提供器创建的ILogger对象)

  • 翻代码,在应用初始化的IWebHostBuilder.Build() -> BuildCommonServices() -> AddLogging() 中看到了

  • 这个泛型Logger<>的命名空间是:Microsoft.Extensions.Logging

image
  • 这个Logger<> 就非常有意思, 他的成员变量里有LoggerFactory和LoggerInformation[] 引用 !!!(LoggerInformation是Logger的包装类,主要增加了一些Logger的元数据,可以理解成这就是一个Logger,这个logger就是LoggerProvider创建的Logger)
image

3.3.2 从ILogger<>.LogWarning() 看Logger调用方式

  • 调用入口


    image
  • 泛型Logger<> 调用Logger


    image
  • Logger 循环调用所有注册的日志提供器生成的Logger


    image

4. 日志的各种使用

4.1 日志域

  • 日志作用域的目的就是想把日志分域(作用域),分组。好处就是方便日志筛选,统计,挖掘。比如可以吧单个业务操作的所有日志分到一个域里。
  • 如果是想把日志输出到ConsoleLogger上并分域,一定要开启分域功能
image
image

4.3 内置日志提供器

  • 控制台
  • 调试
  • EventSource
  • EventLog
  • TraceSource
  • Azure 应用服务

4.3.1 控制台提供程序

  • Microsoft.Extensions.Logging.Console 提供程序包
  • 向控制台发送日志输出。
  • loggerFactory.AddConsole();


    image

4.3.2 调试提供程序

  • Microsoft.Extensions.Logging.Debug 提供程序包
  • 使用 System.Diagnostics.Debug 类(Debug.WriteLine 方法调用)来写入日志输出。
    在 Linux 中,此提供程序将日志写入 /var/log/message。
  • loggerFactory.AddDebug();


    image

4.3.3 EventSource 提供程序

  • Microsoft.Extensions.Logging.EventSource 提供程序包
  • ASP.NET Core 1.1.0 或更高版本
  • 可实现事件跟踪。 在 Windows 中,它使用 ETW。 提供程序可跨平台使用,但尚无支持 Linux 或 macOS 的事件集合和显示工具。
  • 可使用 PerfView 实用工具收集和查看日志。
  • logging.AddEventSourceLogger();


    image

4.3.4 Windows EventLog 提供程序

  • Microsoft.Extensions.Logging.EventLog 提供程序包
  • 向 Windows 事件日志发送日志输出。
  • loggerFactory.AddEventLog();


    image

4.3.5 TraceSource 提供程序

  • Microsoft.Extensions.Logging.TraceSource 提供程序包
  • loggerFactory.AddTraceSource();

4.3.6 Azure 应用服务提供程序

  • Microsoft.Extensions.Logging.AzureAppServices 提供程序包
  • ASP.NET Core 1.1.0 或更高版本
  • 将日志写入 Azure App Service 应用的文件系统,以及 Azure 存储帐户中的 blob 存储。
  • loggerFactory.AddAzureWebAppDiagnostics();

4.3.7 日志等级和日志筛选

  • 最低级别以下的日志不会传递给提供程序,因此不会显示或存储它们。
  • LogLevel.None 等级最高
  • LogLevel.Trace 等级最低
  • 日志等级就是用来做日志筛选
4.3.7.1 等级种类
  • Trace = 0
  • Debug = 1
  • Information = 2
  • Warning = 3
  • Error = 4
  • Critical = 5
  • None = 6
4.3.7.2 按严重性从低到高排列
  • 跟踪Trace = 0 表示仅对于开发人员调试问题有价值的信息。 这些消息可能包含敏感应用程序数据,因此不得在生产环境中启用它们。 默认情况下禁用。

  • 调试Debug = 1 表示在开发和调试过程中短期有用的信息。除非要排查问题,否则通常不会在生产中启用 Debug 级别日志,因为日志数量过多。

  • 信息Information = 2 用于跟踪应用程序的常规流。 这些日志通常有长期价值。

  • 警告Warning = 3 表示应用程序流中的异常或意外事件。 可能包括不会中断应用程序运行但仍需调查的错误或其他条件。 Warning 日志级别常用于已处理的异常。

  • 错误Error = 4 表示无法处理的错误和异常。 这些消息指示的是当前活动或操作(如当前 HTTP 请求)中的失败,而不是应用程序范围的失败。

  • 严重Critical = 5 需要立即关注的失败。 例如数据丢失、磁盘空间不足。

  • None = 6 是禁用所有日志,因为没有比None更高的等级

4.3.7.3 举例

如果我等级配置成Error,那么就只会显示 Error和Critical类型的日志


image

image

image
4.3.7.4 提供程序别名
  • Console
  • Debug
  • EventLog
  • AzureAppServices
  • TraceSource
  • EventSource
  • 别名在日志筛选的时候需要用到
4.3.7.5 日志筛选配置
image

4.4 第三方日志记录提供程序

4.7 实现自己的文件日志提供程序

image
  • 注册提供器


    image
  • 运行效果


    image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容