如何在ASP.NET Core中排除AliveCheck接口的控制台日志输出?
排除AliveCheck接口的ASP.NET Core日志输出
当然可以实现这个需求,以下是几种可行的方案,同时说明你之前方案无效的原因:
你之前方案无效的原因
- 全局设置日志级别为Warning会屏蔽所有低于Warning级别的日志,包括正常接口的请求日志,不符合需求。
Category属性并非ASP.NET Core标记日志类别的标准方式,控制器方法的日志默认使用控制器完整类型名作为类别,基于该属性的过滤不会生效。LoggerMessage属性需要配合自定义日志实现使用,默认的请求日志组件无法识别该属性,因此无法实现过滤。
可行解决方案
方案1:利用HTTP日志中间件路径过滤(.NET 6+推荐)
如果你的API使用ASP.NET Core内置的HttpLogging中间件记录请求日志,可直接配置路径过滤规则:
// 在Program.cs中配置服务 builder.Services.AddHttpLogging(options => { // 配置需要记录的日志字段(按需调整) options.LoggingFields = HttpLoggingFields.RequestMethod | HttpLoggingFields.RequestPath | HttpLoggingFields.ResponseStatusCode; // 过滤掉AliveCheck路径的日志 options.RequestPathFilter = path => !path.Equals("/AliveCheck", StringComparison.OrdinalIgnoreCase); }); // 注意中间件顺序,需放在路由中间件之后 app.UseRouting(); app.UseHttpLogging(); app.UseAuthorization(); app.MapControllers();
方案2:自定义全局日志过滤器
如果请求日志来自MVC控制器调用等其他组件,可通过自定义过滤器检查日志事件中的请求路径实现过滤:
webBuilder.ConfigureLogging(logging => { logging.ClearProviders(); logging.AddConsole(); logging.AddFilter((logEvent) => { // 针对MVC控制器的请求日志类别(可根据实际日志输出调整类别) if (logEvent.CategoryName.StartsWith("Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker")) { if (logEvent.Properties.TryGetValue("RequestPath", out var pathValue) && pathValue is string path && path.Equals("/AliveCheck", StringComparison.OrdinalIgnoreCase)) { return false; // 排除该路径的日志 } } // 针对HttpLogging中间件的日志类别 else if (logEvent.CategoryName == "Microsoft.AspNetCore.HttpLogging.HttpLoggingMiddleware") { if (logEvent.Properties.TryGetValue("RequestPath", out var pathValue) && pathValue is string path && path.Equals("/AliveCheck", StringComparison.OrdinalIgnoreCase)) { return false; } } // 其他日志按级别输出(这里设置为Information及以上,按需调整) return logEvent.LogLevel >= LogLevel.Information; }); });
方案3:通过中间件跳过指定路径日志
编写自定义中间件,在日志中间件之前拦截AliveCheck请求,跳过日志记录逻辑:
// 放在日志中间件之前注册 app.Use(async (context, next) => { if (context.Request.Path.Equals("/AliveCheck", StringComparison.OrdinalIgnoreCase)) { // 直接执行后续逻辑,不经过日志中间件 await next(); return; } await next(); });
内容的提问来源于stack exchange,提问作者Thomas Voß
相关产品推荐
相关产品推荐

