.netcore2.1 添加Action接口请求全局日志打印filter
- 添加过滤器
using Microsoft.AspNetCore.Http.Internal; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System.IO; using System.Text; namespace MyPro.Filters { public class LogFilter : IActionFilter { ILogger _logger; public LogFilter(ILogger<LogFilter> logger) { _logger = logger; } public void OnActionExecuted(ActionExecutedContext context) { if (!(context.Result is FileStreamResult)) { var statusCode = context.HttpContext.Response.StatusCode; var result = context.Result; _logger.LogInformation($"HashCode:{context.HttpContext.Request.GetHashCode()},路由:{context.HttpContext.Request.Path},响应码{statusCode},出参{JsonConvert.SerializeObject(result)}"); } } public void OnActionExecuting(ActionExecutingContext context) { if (context.HttpContext.Request.Path != null && !context.HttpContext.Request.Path.Value.ToLower().Contains("/user/login")) { var header = context.HttpContext.Request.Headers; var query = context.HttpContext.Request.Query; var body = string.Empty; if (context.HttpContext.Request.Method.ToUpper() == "POST") { context.HttpContext.Request.EnableRewind(); context.HttpContext.Request.Body.Seek(0, 0); using (var ms = new MemoryStream()) { context.HttpContext.Request.Body.CopyTo(ms); var b = ms.ToArray(); body = Encoding.UTF8.GetString(b); } } var log = new { query, header, body }; _logger.LogInformation($"HashCode:{context.HttpContext.Request.GetHashCode()},路由:{context.HttpContext.Request.Path},入参{JsonConvert.SerializeObject(log)}"); } } } }
- 在Startup.cs中注入服务
services.AddMvc(options => { options.Filters.Add(typeof(LogFilter)); }).SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddJsonOptions(options => { options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss"; });
标签:
.netcore
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律