Asp.net core 通过MVC禁用类跟踪信息日志记录

Asp.net core 通过MVC禁用类跟踪信息日志记录,asp.net-core,asp.net-core-mvc,asp.net-core-webapi,Asp.net Core,Asp.net Core Mvc,Asp.net Core Webapi,在为ASP.NET核心MVC应用程序启用应用程序日志记录时,我发现对API的每个请求都会记录大量低级详细信息(参见下面的示例) 我发现这会用类似跟踪的细节污染应用程序日志(特别是因为我们每分钟都会收到数百个请求),这使得处理起来非常困难 有没有办法禁用此功能?或者我应该考虑另一种日志记录方法 API请求的示例信息日志 2017-03-14 09:23:46.944+00:00[信息]请求启动HTTP/1.1 GET application/json 2017-03-14 09:23:46.944

在为ASP.NET核心MVC应用程序启用应用程序日志记录时,我发现对API的每个请求都会记录大量低级详细信息(参见下面的示例)

我发现这会用类似跟踪的细节污染应用程序日志(特别是因为我们每分钟都会收到数百个请求),这使得处理起来非常困难

有没有办法禁用此功能?或者我应该考虑另一种日志记录方法

API请求的示例信息日志

2017-03-14 09:23:46.944+00:00[信息]请求启动HTTP/1.1 GET application/json

2017-03-14 09:23:46.944+00:00[信息]已成功验证 代币

2017-03-14 09:23:46.944+00:00[信息]HttpContext.用户合并 通过来自authenticationScheme的自动身份验证:“载体”

2017-03-14 09:23:46.944+00:00[信息]认证方案: “持票人”已成功通过身份验证

2017-03-14 09:23:46.944+00:00[信息]授权被取消 用户成功:null

2017-03-14 09:23:46.944+00:00[信息]执行动作方法 “Xyz.GetAsync(Xyz.Api)” 带有参数([“Xyz.Something”,“”, ,,,,,,,,“0”,“100”,“2017-06-01T00:00:00Z”,“False”]) -ModelState是有效的

2017-03-14 09:23:47.115+00:00[信息]执行JsonResult, 写作价值 “Xyz.Resources.SomeModel[]”

2017-03-14 09:23:47.115+00:00[信息]执行的操作 “Xyz.GetAsync(Xyz.Api)” 在206.5169毫秒

2017-03-14 09:23:47.115+00:00[信息]请求已在中完成 216.8241ms 200应用程序/json;字符集=utf-8


日志级别

这些似乎都是
信息
,您应该能够在
appsettings.json
中进行调整,以便记录的条目级别大于“info”。。。看

记录事件Id

日志级别是应用程序范围内的,因此所有使用日志的东西在这方面都是相同的。如果你想让你的日志脱颖而出,并且发现它们更重要,那么就把它们记录下来。将它们记录为警告(如果适用)。另外,您也可以使用
EventId
开始隔离日志。其想法是,您可以根据“id”过滤日志,以快速找到感兴趣的内容

过滤器

最后,您可以应用过滤器

您可以为注册到的所有提供程序设置筛选规则 使用WithFilter扩展方法创建ILogerFactory实例。 下面的示例限制了框架日志(类别以 “Microsoft”或“System”)在允许应用程序在 调试级别


我想过滤器是你在这里要找的。指定
Microsoft
System
都处于
日志级别。警告
,那么您应该只看到其中的重要日志。

看起来netcoreapp2.0中的钩子略有更改:

公共虚拟void配置服务(IServiceCollection服务)
{
services.AddSingleton();
AddSingleton(typeof(ILogger)、typeof(Logger));
services.AddLogging(builder=>
{
builder.SetMinimumLevel(LogLevel.Trace);
builder.AddFilter(“Microsoft”,LogLevel.Warning);
builder.AddFilter(“系统”,LogLevel.Error);
builder.AddFilter(“引擎”,LogLevel.Debug);
});
///…等等
}

添加上述内容对我来说是个好办法。

@DavidPine问题是我们自己的信息级应用程序日志将无法通过。您可以回复答案。在任何情况下,您都可以在更合适的级别进行筛选或登录。你可能需要过滤。
public void Configure(IApplicationBuilder app,
    IHostingEnvironment env,
    ILoggerFactory loggerFactory)
{
    loggerFactory
        .WithFilter(new FilterLoggerSettings
        {
            { "Microsoft", LogLevel.Warning },
            { "System", LogLevel.Warning },
            { "ToDoApi", LogLevel.Debug }
        })
        .AddConsole()
        .AddDebug()
}