通过MVC禁用跟踪式INFO日志记录

时间:2017-03-14 11:35:33

标签: asp.net-core asp.net-core-mvc asp.net-core-webapi

为ASP.NET Core MVC应用程序启用应用程序日志记录时,我发现每次向API发出的请求都记录了很多低级细节(参见下面的示例)。

我发现这会污染应用程序日志(特别是因为我们收到了数百条分钟请求),其中包含类似跟踪的详细信息,这使得使用起来非常困难。

有没有办法禁用它?或许我应该考虑另一种记录方法?

API请求的INFO日志示例

  

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

     

2017-03-14 09:23:46.944 +00:00 [信息]成功通过验证   令牌。

     

2017-03-14 09:23:46.944 +00:00 [信息] HttpContext.User合并   通过来自authenticationScheme的AutomaticAuthentication:“Bearer”。

     

2017-03-14 09:23:46.944 +00:00 [信息] AuthenticationScheme:   “Bearer”已成功通过验证。

     

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”,“假”])    - 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.5169ms

     

2017-03-14 09:23:47.115 +00:00 [信息]请求已完成   216.8241ms 200 application / json;字符集= UTF-8

2 个答案:

答案 0 :(得分:2)

日志级别

这些似乎都是Information,您应该能够在appsettings.json中对此进行调整,以便记录的条目级别大于" info" ..见Log Level

记录事件ID

日志级别是应用程序范围的,因此在这方面使用日志记录的所有内容都是相同的。如果您希望您的日志脱颖而出并发现它们更重要,请记录它们。将它们记录为警告 - 如果适用的话。此外,作为替代方案,您可以使用EventId开始隔离日志。这个想法是你可以根据" id"过滤日志。快速找到感兴趣的东西。

过滤器

最后,您可以应用过滤器。

  

您可以为注册的所有提供商设置过滤规则   使用WithFilter扩展方法的ILoggerFactory实例。   以下示例限制框架日志(类别以   "微软"或者"系统")在让应用登录时发出警告   调试级别。

public void Configure(IApplicationBuilder app,
    IHostingEnvironment env,
    ILoggerFactory loggerFactory)
{
    loggerFactory
        .WithFilter(new FilterLoggerSettings
        {
            { "Microsoft", LogLevel.Warning },
            { "System", LogLevel.Warning },
            { "ToDoApi", LogLevel.Debug }
        })
        .AddConsole()
        .AddDebug()
}

我认为过滤器就是您在这里寻找的东西。指定MicrosoftSystem都在LogLevel.Warning,然后您应该只看到来自它们的重要日志。

答案 1 :(得分:2)

看起来这个钩子在netcoreapp2.0中略有改变:

public virtual void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<ILoggerFactory, LoggerFactory>();
    services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
    services.AddLogging(builder =>
    {
        builder.SetMinimumLevel(LogLevel.Trace);
        builder.AddFilter("Microsoft", LogLevel.Warning);
        builder.AddFilter("System", LogLevel.Error);
        builder.AddFilter("Engine", LogLevel.Debug);
    });

    /// ... etc
}

添加以上功能对我来说很有用。