【问题标题】:ASP.NET Core 3.1, logging only specific messages to Azure Log Stream ConsoleASP.NET Core 3.1,仅将特定消息记录到 Azure 日志流控制台
【发布时间】:2020-08-14 01:18:25
【问题描述】:

我有一个在 Microsoft Azure 应用服务上运行的 ASP.NET Core 3.1 API。

我在应用程序中设置了ILogger,并广泛使用它来监控 API 的行为。我希望能够在应用门户的 Azure 日志流中实时查看这些消息。

AzureWebAppDiagnostics注册到Program.cs后,我设法获取日志如下:

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

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureLogging(logging =>
                {
                    logging.ClearProviders();
                    logging.AddConsole();
                    logging.AddAzureWebAppDiagnostics();
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
       }
    }

问题是我使用

明确记录的消息
logger.LogInformation("whatever message") 

与系统消息混合并被淹没:实体框架命令、Microsoft.Hosting.Lifetime 消息和多个其他信息性消息。

如何设置系统,使我只从系统中获取错误/警告消息,并从我的应用代码中获取信息性消息。

我尝试将appsettings.json更改如下,但似乎完全没有效果:

"Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Error",
      "Microsoft.Hosting.Lifetime": "Error",
      "Microsoft.*": "Error",
      "System": "Error",
      "Microsoft.EntityFrameworkCore.*": "Warning" 
    }
  }

我也删除了appsettings.development.json 文件以防万一,正如here 建议的那样。

我做错了什么?

【问题讨论】:

    标签: c# azure asp.net-core


    【解决方案1】:

    其实经过深入研究,提供了解决方案here

    您需要将 AzureAppServicesBlob 和 AzureAppServicesFile 配置添加到您的配置文件中,它们似乎是 Azure 日志流考虑的。

    所以我添加了以下部分:

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

    【讨论】:

      【解决方案2】:

      配置中没有通配符。它只是一个命名空间前缀:使用Microsoft.EntityFrameworkCore 作为属性名称。

      【讨论】:

      • 这不是它不起作用的原因,尽管命名空间是正确的,但我可以看到 Hosting.Lifetime 信息日志。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多