【问题标题】:Disabling trace-like INFO logging by MVC通过 MVC 禁用类似跟踪的 INFO 日志记录
【发布时间】:2018-02-25 21:07:55
【问题描述】:

在为 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”、“假”]) - 模型状态有效

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

【问题讨论】:

  • @DavidPine 那么问题是我们自己的信息级应用程序日志都不会通过。
  • 您可以回复答案。在任何情况下,您都可以过滤或以更合适的级别记录。您可能想要过滤。

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


【解决方案1】:

看起来这个钩子在 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
}

添加以上内容对我有用。

【讨论】:

    【解决方案2】:

    日志级别

    这些似乎都是Information,您应该可以在appsettings.json 中进行调整,以便记录的条目级别大于“信息”...参见Log Level

    日志事件 ID

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

    过滤器

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

    您可以为注册的所有提供商设置过滤规则 使用 WithFilter 扩展方法的 ILoggerFactory 实例。 下面的示例限制了框架日志(类别以 “Microsoft”或“System”)在让应用程序登录时发出警告 调试级别。

    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,那么您应该只能看到来自它们的重要日志。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 1970-01-01
      • 2013-11-13
      • 2011-09-16
      相关资源
      最近更新 更多