/// <summary>/// HTTP服务日志中间件/// <para>支持Request、Response信息输出</para>/// <para>支持请求处理耗时输出</para>/// </summary>public class LoggerMiddleware{const string _FileName = "请求日志";private readonly RequestDelegate _Next;/// <summary>/// 不记录日志的请求类型/// </summary>/// <summary>/// 日志中间件/// </summary>/// <param name="next"></param>public LoggerMiddleware(RequestDelegate next){_Next = next;}/// <summary>/// 请求拦截处理/// </summary>/// <param name="context">HTTP请求</param>/// <returns></returns>public async Task InvokeAsync(HttpContext context){string fPath = context.Request.Path.ToString().ToLower();int fIndex = fPath.LastIndexOf('.');if (fIndex > -1){if (fPath.Substring(fIndex, fPath.Length - fIndex) != ".html"){await _Next(context);return;}}context.Request.EnableBuffering();var requestReader = new StreamReader(context.Request.Body);var requestContent = requestReader.ReadToEnd();StringBuilder fLog = new StringBuilder();fLog.AppendLine($"Request:{context.Request.Method}:{context.Request.Path.ToString()}{context.Request.QueryString}");fLog.AppendLine($"Request Body:{requestContent}");YLog.Append(fLog.ToString(), _FileName, YConst.mFolderName);context.Request.Body.Position = 0;Stream originalBody = context.Response.Body;try{using (var ms = new MemoryStream()){context.Response.Body = ms;var fWatch = new Stopwatch();fWatch.Start();await _Next(context);fWatch.Stop();ms.Position = 0;string responseBody = new StreamReader(ms).ReadToEnd();YLog.Append($"Response Body({fWatch.ElapsedMilliseconds}ms):\r\n{responseBody}", _FileName, YConst.mFolderName);ms.Position = 0;await ms.CopyToAsync(originalBody);}}finally{context.Response.Body = originalBody;}}}

asp.net core 日志中间件(LoggerMiddleware)相关推荐

  1. ASP.NET Core 日志框架:Serilog

    在 ASP.NET Core 日志模型 中对日志整体实现方式进行了介绍,通过使用内置日志记录器来实现日志的输出路径.而在实际项目开发中,使用第三方日志框架来记录日志也是非常多的,首先一般基础的内置日志 ...

  2. aspnetcore mvc 异常处理_深入探究ASP.NET Core异常处理中间件

    前言 全局异常处理是我们编程过程中不可或缺的重要环节.有了全局异常处理机制给我们带来了很多便捷,首先我们不用满屏幕处理程序可能出现的异常,其次我们可以对异常进行统一的处理,比如收集异常信息或者返回统一 ...

  3. 深入探究ASP.NET Core异常处理中间件

    前言 全局异常处理是我们编程过程中不可或缺的重要环节.有了全局异常处理机制给我们带来了很多便捷,首先我们不用满屏幕处理程序可能出现的异常,其次我们可以对异常进行统一的处理,比如收集异常信息或者返回统一 ...

  4. ASP.NET Core ---日志

    一.日志记录:  1.日志的作用: 程序中记录日志一般有两个目的,故障定位和显示程序运行状态.好的日志记录方式可以提供足够多定位问题的依据. 2.日志的等级: 有良好工作习惯的人,工作的时候会将领导交 ...

  5. Asp.Net Core 通过中间件防止图片盗链

    一.原理 要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或 ...

  6. ASP.NET Core 开发-中间件(Middleware)

    ASP.NET Core开发,开发并使用中间件(Middleware). 中间件是被组装成一个应用程序管道来处理请求和响应的软件组件. 每个组件选择是否传递给管道中的下一个组件的请求,并能之前和下一组 ...

  7. Asp.Net.Core 系列-中间件和依赖注入进阶篇

    上一节讲了中间件和依赖注入的基础,紧接着: 中间件是怎么使用的?使用步骤是什么? 只要把中间件注册到管道中就行了,可以借助Startup对象(DelegateStartup或者ConventionBa ...

  8. 如何利用Serilog的RequestLogging来精简ASP.NET Core的日志输出

    这是该系列的第一篇文章:在ASP.NET Core 3.0中使用Serilog.AspNetCore. 第1部分-使用Serilog RequestLogging来简化ASP.NET Core的日志输 ...

  9. 学习ASP.NET Core,怎能不了解请求处理管道[1]: 中间件究竟是个什么东西?

    ASP.NET Core管道虽然在结构组成上显得非常简单,但是在具体实现上却涉及到太多的对象,所以我们在 "通过重建Hosting系统理解HTTP请求在ASP.NET Core管道中的处理流 ...

最新文章

  1. linux下,redis 3.2.1双节点集群安装部署
  2. ASIFormDataRequest实现post的代码示例
  3. Redis的安装与配置
  4. 微信如何解绑小程序_微信小程序该如何运营推广
  5. VC++和VC++.NET中与图像处理有关的几个概念、结构和类
  6. Qt 串口类QSerialPort 使用笔记
  7. MVC初学 - The type or namespace name 'DbContext' could not be found
  8. (ヒトコト)一个挺有趣的东西!作为一个动漫宅,游戏宅来说还是一个挺有趣的接口!banner上面就是...
  9. to_sql用法示例_SQL Union概述,用法和示例
  10. 矩池云上创建Pytorch 0.41环境
  11. 高频一线大厂Python面试题:算法+爬虫+数据处理+基础
  12. css属性选择器,[],=, ~=, ^=, ~=, $=, |=等符号含义
  13. HTML5 浏览器返回按钮/手机返回按钮事件监听
  14. 单片微机计算机原理与接口技术高峰,单片微机原理与接口技术
  15. 个人学习计划(计算机专业),大学生个人学习计划范文
  16. 新一代HTAP数据库崛起,MySQL生态的最佳归宿?
  17. 点电荷分布matlab仿真,利用Matlab模拟点电荷的电场分布..doc
  18. FPGA之OV7725摄像头采集与VGA显示实验--3--摄像头配置模块实现(Verilog代码)
  19. 点到超平面的距离公式
  20. Error in nextTick TypeError Cannot read property 'children' of undefined 解决

热门文章

  1. 辅警小丁同志 灵宝西站派出所第一警务区赵桥
  2. 怎么在node环境使用es6语法? bable有什么作用? 发布环境下移除console
  3. 何为二进制计算机语言,二进制解码时尚新青年
  4. HDU6397 Character Encoding 插板法+容斥
  5. 苹果iphone手机哪些机型支持刷公交卡
  6. Chrome浏览器:分享几个好用的谷歌浏览器拓展程序
  7. 用eclipse和androidstudio和基于高德地图API开发的附近购平台的java服务端和android客户端数据库用mysql包括程序设计图
  8. python产品质量分析报告范文_Python Jinja2 徒手生成数据分析报告
  9. Android-自定义幸运抽奖转盘
  10. python爬虫爬取必应壁纸