.net core 日志引擎

作者: 李浩的博客 | 来源:发表于2018-09-20 12:00 被阅读0次

    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

    相关文章

      网友评论

        本文标题:.net core 日志引擎

        本文链接:https://www.haomeiwen.com/subject/nzwgnftx.html