Asp.net core 筛选Azure Web App诊断日志中的日志
是否可以使用Azure的Web应用程序诊断日志过滤日志以捕获应用程序日志 我想捕获程序集报告的信息级别日志,但只捕获MS/System库的警告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
Startup.cs
如下所示:
loggerFactory
.WithFilter(new FilterLoggerSettings
{
{ "Microsoft", LogLevel.Warning },
{ "System", LogLevel.Warning },
{ "MyAssembly", LogLevel.Information }
})
.AddAzureWebAppDiagnostics();
但在Azure门户中,只有一个设置级别的选项:
根据您的场景,我已经测试了这个问题,您可以在
configure
method ofStartup.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)的信息级别。工作非常好。我不知道我以前是怎么弄错的。