自带Logging使用

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

简单使用Logging

配置文件

  1. {
  2. "Logging": {
  3. "Debug": {
  4. "LogLevel": {
  5. "Default": "Information"
  6. }
  7. },
  8. "Console": {
  9. "IncludeScopes": false,
  10. "LogLevel": {
  11. "Microsoft.AspNetCore.Mvc.Razor.Internal": "Warning",
  12. "Microsoft.AspNetCore.Mvc.Razor.Razor": "Debug",
  13. "Microsoft.AspNetCore.Mvc.Razor": "Error",
  14. "Default": "Information"
  15. }
  16. },
  17. "LogLevel": {
  18. "Default": "Debug"
  19. }
  20. }
  21. }

配置Logging

  1. public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  2. WebHost.CreateDefaultBuilder(args)
  3. .UseStartup<Startup>()
  4. .ConfigureLogging(logging =>
  5. {
  6. logging.ClearProviders();
  7. logging.AddConsole();
  8. });

使用

  • 先依赖注入接收实例
  1. private readonly ILogger _logger;
  2. public HomeController(ILogger<HomeController> logger)
  3. {
  4. this._logger = logger;
  5. }
  • 再直接使用
  1. public IActionResult Index()
  2. {
  3. _logger.LogError("Error-----------11111111111111111");
  4. Thread.Sleep(3000);
  5. _logger.LogInformation("Info------------2222222222222");
  6. Thread.Sleep(3000);
  7. _logger.LogDebug("Debug-----------333333333333333");
  8. Thread.Sleep(3000);
  9. _logger.LogWarning("Warning-----------------44444444444444");
  10. return Content("success");
  11. }
  • 运行结果

自带Logging - 图1

  • 注意:Program中使用Logging直接获取服务 不需要依赖注入
  1. public static void Main(string[] args)
  2. {
  3. var host = CreateWebHostBuilder(args).Build();
  4. var logger = host.Services.GetRequiredService<ILogger<Program>>();
  5. logger.LogInformation("Seeded the database.");
  6. host.Run();
  7. }
  • 设置日志ID
  1. _logger.LogWarning(LoggingEvents.GetItemNotFound, "Index-----------5555555555");
  • LoggingEvents定义 这部分可以自己定义记录日志的严重性
  1. public class LoggingEvents
  2. {
  3. public const int GenerateItems = 1000;
  4. public const int ListItems = 1001;
  5. public const int GetItem = 1002;
  6. public const int InsertItem = 1003;
  7. public const int UpdateItem = 1004;
  8. public const int DeleteItem = 1005;
  9. public const int GetItemNotFound = 4000;
  10. public const int UpdateItemNotFound = 4001;
  11. }
  • 运行测试

自带Logging - 图2

  • 在代码中设置筛选级别
  1. public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
  2. WebHost.CreateDefaultBuilder(args)
  3. .UseStartup<Startup>()
  4. .ConfigureLogging(logging =>
  5. {
  6. logging.ClearProviders();
  7. logging.AddConsole();
  8. logging.AddFilter("System", LogLevel.Debug).AddFilter<DebugLoggerProvider>("Microsoft", LogLevel.Trace);
  9. });

如何应用筛选规则

自带Logging - 图3

选择筛选规则的算法

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

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