Appsettings Json 中的 ILoggingBuilder Logging LogLevel 似乎未在 Azure Log Stream 或 Blob Log 中得到确认

ILoggingBuilder Logging LogLevel in Appsettings Json doesn't seem to be acknowledged in Azure Log Stream or Blob Log

我创建了一个新的 .net core 2.1 Web 应用程序并部署到 Azure,日志流和应用程序日志记录到 Blob 存储似乎不符合我的日志记录配置。

我在 Visual Studio 2019 年为 .net core 2.1 Web 应用程序创建了一个新项目的新解决方案。在 home controller Index 路由中,我们添加了一行日志信息,如下所示:

private readonly ILogger<HomeController> _logger;

public HomeController(ILogger<HomeController> logger)
{
    _logger = logger;
}

public IActionResult Index()
{
    _logger.LogInformation("=========================================");
    _logger.LogError("=========================================");
    return View();
}

并且在 appsettings.Development.json 中,我们将系统和 Microsoft 的 LogLevel 设置为 "Error"。

我期望 Azure 中的行为与本地 运行 时的行为相同。在本地访问索引路由并将系统和 Microsoft 的 appsettings.Development.json LogLevel 设置为 "Information" 我们在调试输出 window:

中看到此输出

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/1.1 GET http//localhost:44378/
Microsoft.AspNetCore.Authentication.Cookies.CookieAuthenticationHandler:Information: Identity.Application was not authenticated. Failure message: Unprotect ticket failed Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Route matched with {action = "Index", controller = "Home", page = "", area = ""}. Executing controller action with signature Microsoft.AspNetCore.Mvc.IActionResult Index() on controller LoggingTest.Controllers.HomeController (LoggingTest). Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executing action method LoggingTest.Controllers.HomeController.Index (LoggingTest) - Validation state: Valid LoggingTest.Controllers.HomeController:Information: ========================================= LoggingTest.Controllers.HomeController:Error: ========================================= Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action method LoggingTest.Controllers.HomeController.Index (LoggingTest), returned result Microsoft.AspNetCore.Mvc.ViewResult in 7.9475ms. Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor:Information: Executing ViewResult, running view Index. Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor:Information: Executed ViewResult - view Index executed in 11.4824ms. Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action LoggingTest.Controllers.HomeController.Index (LoggingTest) in 37.629ms Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 54.1369ms 200 text/html; charset=utf-8

并且当 System 和 Microsoft 设置为 "Error":

LoggingTest.Controllers.HomeController:Information: ========================================= LoggingTest.Controllers.HomeController:Error: .=========================================

我们希望这种情况成为我们对 LogStream 和日志的输出。我们基本上不希望日志中包含 EfCore 和其他 Microsoft 相关信息,除非其 LogLevel "Error"。但是我们希望记录 "Information" 级别的日志。

发布到 Azure 并将 ASPNETCORE_ENVIRONMENT 设置为开发以使用相同的 Appsettings 设置。调用索引后,日志的日志流和 blob 如下所示:

2019-05-17 15:57:24.844 +00:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request starting HTTP/1.1 GET http//loggingtest20190517104201.azurewebsites.net/ 2019-05-17 15:57:24.844 +00:00 [Information] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Route matched with {action = "Index", controller = "Home", page = "", area = ""}. Executing action LoggingTest.Controllers.HomeController.Index (LoggingTest) 2019-05-17 15:57:24.844 +00:00 [Information] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Executing action method LoggingTest.Controllers.HomeController.Index (LoggingTest) - Validation state: Valid 2019-05-17 15:57:24.844 +00:00 [Information] LoggingTest.Controllers.HomeController: ========================================= 2019-05-17 15:57:24.845 +00:00 [Error] LoggingTest.Controllers.HomeController: ========================================= 2019-05-17 15:57:24.845 +00:00 [Information] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Executed action method LoggingTest.Controllers.HomeController.Index (LoggingTest), returned result Microsoft.AspNetCore.Mvc.ViewResult in 0.0635ms. 2019-05-17 15:57:24.845 +00:00 [Information] Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor: Executing ViewResult, running view Index. 2019-05-17 15:57:24.845 +00:00 [Information] Microsoft.AspNetCore.Mvc.ViewFeatures.ViewResultExecutor: Executed ViewResult - view Index executed in 0.8902ms. 2019-05-17 15:57:24.845 +00:00 [Information] Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker: Executed action LoggingTest.Controllers.HomeController.Index (LoggingTest) in 1.0913ms 2019-05-17 15:57:24.846 +00:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request finished in 1.4542ms 200 text/html; charset=utf-8 2019-05-17 15:57:24.941 +00:00 [Information] Microsoft.AspNetCore.Hosting.Internal.WebHost: Request starting HTTP/1.1 GET

The rest of log removed for brevity...

这是我的 appsettings.development.json 文件:

{
  "Logging": {
    "LogLevel": {
      "Default": "Debug",
      "System": "Error",
      "Microsoft": "Error"
    }
  }
}

这是我的 appsettings.json 文件:

{
  "ConnectionStrings": {
    "DefaultConnection": "Removed"
  }, 
  "AllowedHosts": "*"
}

Azure Web 应用程序中设置的环境变量:

ASPNETCORE_ENVIRONMENT = Development

Program.cs 和 Startup.cs 未从项目模板中修改。

public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)
                .UseStartup<Startup>();

为什么我的日志级别不被尊重?

以前,我使用以下配置 Azure 日志提供程序

"AzureAppServicesDiagnosticsSettings": {
  "Microsoft": "Warning"
}

但正在审查 documentation that provider is now obsolete and is replaced with AzureFileLoggerOptions and AzureBlobLoggerOptions (see Logging in ASP.NET Core)。

不过,我还没有测试过这些配置选项中的任何一个以了解它们是否工作相同。

终于可以通过将这些设置放入我的 appsettings.development.json 文件来使其工作:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Information",
      "System": "Error",
      "Microsoft": "Error"
    },
    "AzureAppServicesBlob": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft": "Error",
        "System": "Error"
      }
    },
    "AzureAppServicesFile": {
      "LogLevel": {
        "Default": "Information",
        "Microsoft": "Error",
        "System": "Error"
      }
    }
  }
}