ASP.NET Core 中的日志记录

Author Image
admin Sunday, May 10, 2020 阅读数: 173

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

ASP.NET Core 中的日志记录

在本章节中,我们将讨论在 ASP.NET Core 中的日志记录。

ASP.NET Core 中的默认日志

我们可以从命令行或 Visual Studio 中 运行 ASP.NET Core 应用程序。

从命令行中运行 ASP.NET Core 应用程序

1、以管理员身份启动命令提示符

2、更改包含项目的文件夹的路径

3、最后执行以下 dot net run命令

我的项目路径为D:\CodeManager\github\yoyomooc\ASP.NET -core--for-beginner\StudentManagement\StudentManagement

61-1

请参考上图,结合自己的项目所在路径,运行命令。

当我们从命令行使用dotnet run命令运行项目时,我们会看到许多信息记录到控制台,如下所示。

info: Microsoft.AspNetCore.Hosting.Internal.WebHost[1]
      Request starting HTTP/1.1 GET http://localhost:5000/
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[3]
      Route matched with {action = "Index", controller = "Home"}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult Index() on controller StudentManagement.Controllers.HomeController (StudentManagement).
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
      Executing action method StudentManagement.Controllers.HomeController.Index (StudentManagement) - Validation state: Valid
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action method StudentManagement.Controllers.HomeController.Index (StudentManagement), returned result Microsoft.AspNetCore.Mvc.ViewResult in 1.1315ms.
info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[1]
      Executing ViewResult, running view Index.
info: Microsoft.EntityFrameworkCore.Infrastructure[10403]
      Entity Framework Core 2.2.4-servicing-10062 initialized 'AppDbContext' using provider 'Microsoft.EntityFrameworkCore.SqlServer' with options: MaxPoolSize=128
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
      Executed DbCommand (6ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
      SELECT [s].[Id], [s].[Major], [s].[Email], [s].[Name], [s].[PhotoPath]
      FROM [Students] AS [s]
info: Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor[4]
      Executed ViewResult - view Index executed in 1483.1058ms.
info: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[2]
      Executed action StudentManagement.Controllers.HomeController.Index (StudentManagement) in 1556.5971ms
info: Microsoft.AspNetCore.Hosting.Internal.WebHost[2]
      Request finished in 1655.418ms 200 text/html; charset=utf-8

如果我们从 Visual Studio 中运行项目,我们会在 Debug 窗口中看到类似的输出。 打开"调试"窗口, 单击 Visual Studio 中的" 调试"菜单,然后选择"Windows"和"输出" 在" 输出"窗口中,从" 显示输出"下拉列表中选择" 调试 "。

在 ASP.NET Core 中日志记录提供程序

日志记录提供程序是存储或显示日志的组件。

例如,Console 日志提供程序在控制台上显示日志。同样,Debug 日志提供程序在 Visual Studio 的"调试"窗口中显示日志。

ASP.NET Core 内置日志记录提供程序

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

ASP.NET Core 的第三方日志记录提供程序

  • NLog
  • Log4net
  • elmah
  • Serilog
  • Sentry
  • Gelf
  • JSNLog
  • KissLog.net
  • Loggr
  • Stackdriver

ASP.NET Core 中默认的日志记录提供程序

在 Program.cs 文件中的 Program 类中的 Main()方法是我们 ASP.NET Core 应程序的入口。 这个方法调用 CreateDefaultBuilder()方法执行几个任务:

  • 设置 Web 服务器
  • 从各种配置源加载主机和应用程序配置信息
  • 配置日志记录

由于 ASP.NET Core 是开源的,我们可以在他们的官方 github 页面上看到完整的源代码。 以下是 CreateDefaultBuilder()方法的源代码:

源代码路径地址:https://github.com/aspnet/AspNetCore/blob/v2.2.2/src/DefaultBuilder/src/WebHost.cs

.ConfigureLogging((hostingContext, logging) =>
{
    logging.AddConfiguration(hostingContext.Configuration.GetSection("Logging"));
    logging.AddConsole();
    logging.AddDebug();
    logging.AddEventSourceLogger();
})

作为配置日志记录的一部分,CreateDefaultBuilder()方法默认添加以下 3 个日志记录提供程序。这就是我们运行 ASP.NET Core 项目时,我们可以在 Visual Studio 的控制台和调试窗口上都显示了日志信息。

  • Console
  • Debug
  • EventSource

在应用程序配置文件 appsettings.json 中可以找到 CreateDefaultBuilder()方法对应的Logging节点 。

以下是我电脑上 appsettings.json 文件中的 Logging 部分。

"Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  }

appsettings.json 文件

LogLevel 用于控制记录或显示的日志数据量。我们将在后面的章节中详细讨论日志级别。

此处我们按 F5 进入调试模式,运行我们的项目,同时打开调试输出窗口,窗口打开位置请看下图:

61-5 成功运行项目后,找到输出窗口查看调式,可以看到下图, 61-2

显示的是"iisexpress"是因为我们当前是进程内,为了让我们控制日志级别更加的方便,我们需要修改我们的项目文件StudentManagement.csproj为进程外,代码如下:

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
  </PropertyGroup>

重新运行项目后,可以看到,运行的进程已经是"dotnet.exe",说明我们已经修改为进程外。

61-4

为了让后续我们的内容跟踪方便,我们可以关闭掉我们弹出的很多内容。 在 Visual Studio 中单击工具 - 选项。在" 选项"窗口的" 调试 - 输出窗口"下,关闭不需要的消息。 61-3

当然在实际开发中不建议您像这样关闭,建议根据自己的需求,灵活调整。

让我们重新运行我们的项目,进入调试模式后。我们的调试界面一片空白,看起来像是我们关闭掉了所有的调试日志内容的打印。

61-6

文章说明

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

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

公众号:角落的白板报