Asp.net core 筛选Azure Web App诊断日志中的日志

Asp.net core 筛选Azure Web App诊断日志中的日志,asp.net-core,asp.net-core-mvc,azure-web-app-service,asp.net-core-1.0,Asp.net Core,Asp.net Core Mvc,Azure Web App Service,Asp.net Core 1.0,是否可以使用Azure的Web应用程序诊断日志过滤日志以捕获应用程序日志 我想捕获程序集报告的信息级别日志,但只捕获MS/System库的警告 Startup.cs如下所示: loggerFactory .WithFilter(new FilterLoggerSettings { { "Microsoft", LogLevel.Warning }, { "System", LogLevel.Warning }, { "MyAssem

是否可以使用Azure的Web应用程序诊断日志过滤日志以捕获应用程序日志

我想捕获程序集报告的信息级别日志,但只捕获MS/System库的警告

Startup.cs
如下所示:

loggerFactory
    .WithFilter(new FilterLoggerSettings
    {
        { "Microsoft", LogLevel.Warning },
        { "System", LogLevel.Warning },
        { "MyAssembly", LogLevel.Information }
    })
    .AddAzureWebAppDiagnostics();
但在Azure门户中,只有一个设置级别的选项:


根据您的场景,我已经测试了这个问题,您可以在
configure
method of
Startup.cs
中配置记录器,如下所示:

loggerFactory
    .WithFilter(new FilterLoggerSettings
    {
        { "Microsoft", LogLevel.Warning },
        { "System", LogLevel.Warning },
        { "MyAssembly", LogLevel.Information }
    })
    .AddAzureWebAppDiagnostics();
loggerFactory
.带过滤器(新过滤器日志设置)
{
{“Microsoft”,LogLevel.Warning},
{“系统”,LogLevel.Warning},
{{custom category},LogLevel.Information}
})
.AddAzureWebAppDiagnostics();
注意:类别将是从中写入日志的类的完全限定名。如果记录器位于
TodoApi.Controllers.TodoController
下,则可以将
{custom category}
配置为
TodoApi
以将框架日志级别限制为程序集中日志的信息

Azure应用程序服务提供商

此提供程序仅适用于以ASP.NET Core 1.1.0或更高版本为目标的应用程序仅当您的项目在Azure环境中运行时,提供程序才起作用。当您在本地运行时,它不起作用——它不会为blob写入本地文件或本地开发存储

使用Azure应用程序服务日志记录时,可用日志级别将是您在筛选规则中设置的级别与在Azure门户上配置的应用程序级别之间的较大级别。为了捕获程序集报告的信息级别日志,您在Azure Portal上配置的应用程序级别需要小于或等于信息级别,您可以将其配置为
verbose
information
。有关更多详情,您可以向这位官员咨询

更新:

以下是关于我的测试的详细信息,您可以参考:

日志筛选

loggerFactory
    .WithFilter(new FilterLoggerSettings
    {
        { "Microsoft", LogLevel.Warning },
        { "System", LogLevel.Warning },
        { "WebApplication_FilterLogging", LogLevel.Information }
    })
    .AddConsole()
    .AddDebug()
    .AddAzureWebAppDiagnostics();
HomeController.cs

public class HomeController : Controller
{
    private readonly ILogger _logger;
    public HomeController(ILogger<HomeController> logger)
    {
        _logger = logger;
    }

    public IActionResult Index()
    {
        _logger.LogWarning($"Index {DateTime.UtcNow}");
        return View();
    }

    public IActionResult About()
    {
        _logger.LogInformation($"About {DateTime.UtcNow}");
        return View();
    }

    public IActionResult Contact()
    {
        _logger.LogError($"Contact {DateTime.UtcNow}");
        return View();
    }
}
公共类HomeController:控制器
{
专用只读ILogger\u记录器;
公共家庭控制器(ILogger记录器)
{
_记录器=记录器;
}
公共IActionResult索引()
{
_logger.LogWarning($“Index{DateTime.UtcNow}”);
返回视图();
}
公共IActionResult About()
{
_logger.LogInformation($“About{DateTime.UtcNow}”);
返回视图();
}
公共IActionResult联系人()
{
_logger.LogError($“Contact{DateTime.UtcNow}”);
返回视图();
}
}
结果

1) “我的输出”窗口中的日志:

2) Blob存储中存储的我的应用程序日志中的日志:

当我为Microsoft/System库设置信息级别日志时,我可以检索以下日志:


您也可以像下面这样在appsettings.json文件中应用过滤器

“日志记录”:{
“包含范围”:错误,
“AzureAppServicesBlob”:{
“日志级别”:{
“默认值”:“警告”,
“Microsoft”:“警告”,
“系统”:“警告”,
{自定义类别}:“信息”
}
},
“日志级别”:{
“默认值”:“警告”
}
}


AzureAppServicesFile还有一个提供程序别名。

我最近在appsettings.json中使用了下面的日志过滤器,遇到了同样的问题

"Logging": {
    "LogLevel": {
      "Microsoft": "Warning",
      "System": "Warning",
      "Default": "Information"
    }
  }
我必须指定每个目标的日志级别,如下所示

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

Azure门户中的日志级别设置为信息

这似乎不起作用。我已经在Azure门户上设置了信息级别,并在启动时应用了该过滤器,但我仍然获得MS和系统的信息级别日志。我已经更新了回复并添加了一些详细信息,您可以参考它们。在Azure门户中,您是否选择了“信息”作为日志级别?谢谢你的详细回答。是的,我在Azure Portal中选择了应用程序日志记录(Blob)的信息级别。工作非常好。我不知道我以前是怎么弄错的。