ASP.NET Core 中 LogLevel 配置及过滤日志信息

admin
admin
2021-06-03
分享:

本文作者:梁桐铭- 微软最有价值专家(Microsoft MVP)
本文出自《从零开始学 ASP.NET Core 与 EntityFramework Core》目录
视频课程效果更佳:跨平台开发实战掌握 ASP.NET Core 与 EntityFramework Core

ASP.NET Core 中 LogLevel 配置及过滤日志信息

在本章节中,我们将讨论 ASP.NET Core 中 LogLevel 配置的重要性。

LogLevel 表示记录消息的严重性。它可以是以下任何一种。它们在此处列出从最低到最高的严重程度。

  • Trace(跟踪) = 0
  • Debug(调试) = 1
  • 信息(Information)= 2
  • 警告(Warning)= 3
  • 错误(Error)= 4
  • 严重(Critical)= 5
  • 无(None)= 6

LogLevel 枚举

我们在 HomeController 构造方法中,输入 LogLevel,然后转到定义后,可以看到 LogLevel,它是通过枚举定义的,它存在于 Microsoft.Extensions.Logging 命名空间中。

namespace Microsoft.Extensions.Logging
{
    public enum LogLevel
    {
        Trace = 0,
        Debug = 1,
        Information = 2,
        Warning = 3,
        Error = 4,
        Critical = 5,
        None = 6
    }
}

appsettings.json 中的 LogLevel

appsettings.json 文件中的 LogLevel 设置用于控制记录或显示的日志数据量。

{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Warning"
    }
  }
}

ILogger 方法

在 ILogger 接口上,有提供日志方法,包括方法名称中的日志级别。例如,要记录 TRACE 消息,我们使用 LogTrace()方法。要记录 WARNING 消息,我们则使用 LogWarning()方法。注意,除 LogLevel = None 外,我们对每个日志级别都有相应的方法。

LogTrace()
LogDebug()
LogInformation()
LogWarning()
LogError()
LogCritical()

LogLevel 示例

在 HomeController 中的 Details()操作方法可以添加代码


public class HomeController : Controller
{
    public ViewResult Details(int? id)
    {
          logger.LogTrace("Trace(跟踪) Log");
            logger.LogDebug("Debug(调试) Log");
            logger.LogInformation("信息(Information) Log");
            logger.LogWarning("警告(Warning) Log");
            logger.LogError("错误(Error) Log");
            logger.LogCritical("严重(Critical) Log");

           //其余代码
    }
}



以下是 appsettings.json 文件中的 LogLevl 配置。

{
  "Logging": {
    "LogLevel": {
      "Default": "Trace",
      "Microsoft": "Warning"
    }
  }
}

在"调试输出"窗口中可以看到以下日志输出内容。由于我们设置了"默认":"Trace",我们可以看到跟踪级别和更高级别的所有内容。由于 Trace 是最低级别,我们会看到所有日志。


StudentManagement.Controllers.HomeController:Trace: Trace Log
StudentManagement.Controllers.HomeController:Debug: Debug Log
StudentManagement.Controllers.HomeController:Information: Information Log
StudentManagement.Controllers.HomeController:Warning: Warning Log
StudentManagement.Controllers.HomeController:Error: Error Log
StudentManagement.Controllers.HomeController:Critical: Critical Log

但是,如果您需要 WARNING 及更高级别,则设置"Default":"Warning"

如果您不想记录任何内容,请将 LogLevel 设置为 None。LogLevel.None 的整数值为 6,高于所有其他日志级别。所以不会记录。

在 ASP.NET Core 中使用日志过滤

请考虑以下日志语句

StudentManagement.Controllers.HomeController:Trace: My log message
  • StudentManagement.Controllers.HomeController 是日志类别(LOG CATEGORY)
  • Trace 是日志级别(LOG LEVEL)。 请记住,日志级别可以是(跟踪 Trace, 调试 Debug, 信息 Information, 等)

简单来说,日志类别(LOG CATEGORY)是记录消息类的完整名称。日志类别中记录的信息都会显示为字符串类型的文本信息,我们可以使用它轻松确定日志来自哪个类。所以我们可以使用 LOG CATEGORY 来进行过滤日志。

使用以下 LogLevel 配置,我们可以从日志类别"StudentManagement.Controllers.HomeController"中查看 Trace 级别和更高级别的所有内容。但是,对于"StudentManagement.Models.SQLEmployeeRepository"类别 仅显示错误级别日志和更高级别。

{
 "Logging": {
   "LogLevel": {
     "Default": "Warning",
     "StudentManagement.Controllers.HomeController": "Trace",
     "StudentManagement.Models.SQLEmployeeRepository": "Error",
     "Microsoft": "Warning"
   }
 }
}

上述 LogLevel 配置适用于所有日志记录提供程序。日志记录提供程序是存储或显示日志的组件。例如,控制台日志记录提供程序在控制台上显示日志。同样,Debug 日志记录提供程序在 Visual Studio 的"调试"窗口中显示日志。

按日志类别(LOG CATEGORY)和日志记录提供程序进行日志筛选

还可以按日志记录提供程序和日志类别来筛选日志。以下是一个例子,使用以下配置,会进行 Debug 级别的日志记录,记录所有 Debug 类别中包含警告和高于警告级别的日志信息。而对于其他类别的日志信息,则将记录并显示所有日志类别的跟踪及更高级别的日志信息。

{
  "Logging": {
    "Debug": {
      "LogLevel": {
        "Default": "Warning",
        "StudentManagement.Controllers.HomeController": "Warning",
        "StudentManagement.Models.SQLEmployeeRepository": "Warning",
        "Microsoft": "Warning"
      }
    },
    "LogLevel": {
      "Default": "Trace",
      "StudentManagement.Controllers.HomeController": "Trace",
      "StudentManagement.Models.SQLEmployeeRepository": "Trace",
      "Microsoft": "Trace"
    }
  }
}

可以看到使用 VS 调试窗口的输出和使用 dotnet 命令行输出的内容以及 和 Nlog 记录到日志中的不同。

特定环境变量中的 appsettings.json 文件中的 LogLevel 配置

请记住特定环境的 appsettings.json 文件(例如 appsettings.development.json)中的配置会覆盖 appsettings.json 文件中的设置。所以请确保特定环境中的 appsettings.json 文件中的日志级别配置是您真正想要的配置信息,防止意外情况的出现。

可以使用 dotnet 命令行来进行启动。

和 iis 的对比

会发现收集到的日志记录信息不同

文章说明

如果您觉得我的文章质量还不错,欢迎打赏,也可以订阅我的视频哦
未得到授权不得擅自转载本文内容,52abp.com 保留版权
感谢您对我的支持

关注微信公众号:角落的白板报

公众号:角落的白板报