为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
答案 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()
}
我认为过滤器就是您在这里寻找的东西。指定Microsoft
和System
都在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
}
添加以上功能对我来说很有用。