ASP.NET Core 中 LogLevel 配置及过滤日志信息
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 保留版权
感谢您对我的支持