如何降低aspnetcore中mvc管道的日志级别?

Sin*_*tic 4 c# serilog asp.net-core-mvc asp.net-core

因此,在ASPNETCORE 2.0项目中,我向日志工厂添加了一个日志记录提供程序(serilog)以及一个控制台接收器.它工作得很好,但我注意到所有框架请求管道(如http请求响应)都将每个小细节记录为INFO.

[17:37:26 INF] Request starting HTTP/1.1 GET http://localhost:5000/test/health
[17:37:26 INF] Executing action method DAS.Gateways.Command.Api.Controllers.TestController.HealthCheck (DAS.Gateways.Command.Api) with arguments (null) - ModelState is Valid
[17:37:26 INF] Health check called.
[17:37:27 INF] Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext.
[17:37:27 INF] Executed action DAS.Gateways.Command.Api.Controllers.TestController.HealthCheck (DAS.Gateways.Command.Api) in 203.8825ms
[17:37:27 INF] Request finished in 343.9801ms 200 application/json; charset=utf-8
[17:38:07 INF] Request starting HTTP/1.1 GET http://localhost:5000/test/health
[17:38:07 INF] Executing action method DAS.Gateways.Command.Api.Controllers.TestController.HealthCheck (DAS.Gateways.Command.Api) with arguments (null) - ModelState is Valid
[17:38:07 INF] Health check called.
[17:38:07 INF] Executing ObjectResult, writing value Microsoft.AspNetCore.Mvc.ControllerContext.
[17:38:07 INF] Executed action DAS.Gateways.Command.Api.Controllers.TestController.HealthCheck (DAS.Gateways.Command.Api) in 53.5876ms
[17:38:07 INF] Request finished in 60.2195ms 200 application/json; charset=utf-8
Run Code Online (Sandbox Code Playgroud)

Info是我们用于生产日志记录的最小日志级别,我们有一个Loggly接收器,其限制为1GB /天,所以我觉得MVC记录所有请求信息,因为INFO有点令人讨厌,我想将它降低到DEBUG.为了清楚起见,我不想提高我的日志记录级别以防止INFO到达接收器,我希望.Net将其日志级别从INFO降低到DEBUG.

这可能吗?怎么样?

Set*_*Set 6

您需要使用日志过滤.

您可以为特定提供商和类别或所有提供商或所有类别指定最低日志级别.低于最低级别的任何日志都不会传递给该提供程序,因此不会显示或存储它们.

过滤规则可以通过配置或代码定义.它在代码中的外观示例:

    // using Serilog.Extensions.Logging;

    public static IWebHost BuildWebHost(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureLogging(logging => 
            {
                logging.AddFilter<SerilogLoggerProvider>("Microsoft", LogLevel.Warning);
            }
            .UseStartup<Startup>()
            .Build();
Run Code Online (Sandbox Code Playgroud)

请注意, AddFilter在这种情况下,我们只指定Serilog日志提供程序,因为我们指定了提供程序类型.如果要为所有提供程序定义筛选器,请使用:

logging.AddFilter("Microsoft", LogLevel.Warning);