[.Net Core学习九]自带Logging使用

Logging是Core框架自带的日志记录框架

简单使用Logging

配置文件

{
  "Logging": {
    "Debug": {
      "LogLevel": {
        "Default": "Information"
      }
    },
    "Console": {
      "IncludeScopes": false,
      "LogLevel": {
        "Microsoft.AspNetCore.Mvc.Razor.Internal": "Warning",
        "Microsoft.AspNetCore.Mvc.Razor.Razor": "Debug",
        "Microsoft.AspNetCore.Mvc.Razor": "Error",
        "Default": "Information"
      }
    },
    "LogLevel": {
      "Default": "Debug"
    }
  }
}

此json创建6条筛选规则 Debug用于调试程序 Console用于控制台程序 其中LogLevel设置了logging最低日志级别前三条分别为指定程序集设定logging级别 未匹配的按照Default设置的最低级别 IncludeScopes配置是否启用作用域 LogLevel设置了所有的程序  创建logging对象时自动为每个提供程序选择一个规则 

配置Logging

public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup()
            .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.AddConsole();
                });

使用

先依赖注入接收实例

private readonly ILogger _logger;
        public HomeController(ILogger logger)
        {
            this._logger = logger;
        }

再直接使用

 public IActionResult Index()
        {
            _logger.LogError("Error-----------11111111111111111");
            Thread.Sleep(3000);
            _logger.LogInformation("Info------------2222222222222");
            Thread.Sleep(3000);
            _logger.LogDebug("Debug-----------333333333333333");
            Thread.Sleep(3000);
            _logger.LogWarning("Warning-----------------44444444444444");
           
            return Content("success");
        }

运行结果

[.Net Core学习九]自带Logging使用_第1张图片

注意:Program中使用Logging直接获取服务 不需要依赖注入

 public static void Main(string[] args)
        {
            var host = CreateWebHostBuilder(args).Build();
            var logger = host.Services.GetRequiredService>();
            logger.LogInformation("Seeded the database.");
            host.Run();
        }

设置日志ID

 _logger.LogWarning(LoggingEvents.GetItemNotFound, "Index-----------5555555555");

LoggingEvents定义 这部分可以自己定义记录日志的严重性

public class LoggingEvents
    {
        public const int GenerateItems = 1000;
        public const int ListItems = 1001;
        public const int GetItem = 1002;
        public const int InsertItem = 1003;
        public const int UpdateItem = 1004;
        public const int DeleteItem = 1005;

        public const int GetItemNotFound = 4000;
        public const int UpdateItemNotFound = 4001;
    }

运行测试

[.Net Core学习九]自带Logging使用_第2张图片

在代码中设置筛选级别

  public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup()
            .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.AddConsole();
                    logging.AddFilter("System", LogLevel.Debug).AddFilter("Microsoft", LogLevel.Trace);
                });

如何应用筛选规则

先前示例中显示的配置数据和 AddFilter 代码会创建下表所示的规则。 前六条由配置示例创建,后两条由代码示例创建

[.Net Core学习九]自带Logging使用_第3张图片

选择筛选规则的算法

  • 选择匹配提供程序或其别名的所有规则。 如果找不到任何匹配项,则选择提供程序为空的所有规则。
  • 根据上一步的结果,选择具有最长匹配类别前缀的规则。 如果找不到任何匹配项,则选择未指定类别的所有规则。
  • 如果选择了多条规则,则采用最后一条 。
  • 如果未选择任何规则,则使用 MinimumLevel

简单来说 就是在生成ILogger实例的时候 查找筛选规则 先找规则命名最具体的 如果都没有匹配的就按照未指定类别的规则 如果也没有就用系统默认的 如果定义了多条就使用最后一条

提供程序别名

每个提供程序都定义了一个别名;可在配置中使用该别名来代替完全限定的类型名称 。 对于内置提供程序,请使用以下别名:

  • Console
  • Debug
  • EventSource
  • EventLog
  • TraceSource
  • AzureAppServicesFile
  • AzureAppServicesBlob
  • ApplicationInsights

代码中设置最低级别

 public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup()
           .ConfigureLogging(logging => logging.SetMinimumLevel(LogLevel.Warning));

系统类别和级别

下面是 ASP.NET Core 和 Entity Framework Core 使用的一些类别,备注中说明了可从这些类别获取的具体日志:

类别 说明
Microsoft.AspNetCore 常规 ASP.NET Core 诊断。
Microsoft.AspNetCore.DataProtection 考虑、找到并使用了哪些密钥。
Microsoft.AspNetCore.HostFiltering 所允许的主机。
Microsoft.AspNetCore.Hosting HTTP 请求完成的时间和启动时间。 加载了哪些承载启动程序集。
Microsoft.AspNetCore.Mvc MVC 和 Razor 诊断。 模型绑定、筛选器执行、视图编译和操作选择。
Microsoft.AspNetCore.Routing 路由匹配信息。
Microsoft.AspNetCore.Server 连接启动、停止和保持活动响应。 HTTP 证书信息。
Microsoft.AspNetCore.StaticFiles 提供的文件。
Microsoft.EntityFrameworkCore 常规 Entity Framework Core 诊断。 数据库活动和配置、更改检测、迁移。

日志作用域

 using (_logger.BeginScope("附加到使用块中创建的日志的消息"))
            {
                _logger.LogError("Error-----------11111111111111111");
                Thread.Sleep(3000);
                _logger.LogInformation("Info------------2222222222222");
                Thread.Sleep(3000);
                _logger.LogDebug("Debug-----------333333333333333");
                Thread.Sleep(3000);
                _logger.LogWarning("Warning-----------------44444444444444");
                string p1 = "parm1";
                string p2 = "parm2";
                _logger.LogWarning(LoggingEvents.GetItemNotFound, "values:{0} {1}", p1, p2);
            }

[.Net Core学习九]自带Logging使用_第4张图片

我也没明白具体作用以后再研究

你可能感兴趣的:(Core)