(C#)日志接口请求响应时间
日志接口响应时间,记录接口请求信息,响应结果以及响应时间等。可以清楚的分析和了解接口状态。
如果一个一个地在接口下面做日志,那不是我们想要的结果。所以,我们选择做一个特性来控制接口要不要记录请求响应日志。
关键代码如下:
public class LogRequestAndResponseAttribute: ActionFilterAttribute
{
private static string RequestLogSwitch = string.IsNullOrEmpty(ConfigurationSettings.AppSettings["RequestLogSwitch"])?"0": ConfigurationSettings.AppSettings["RequestLogSwitch"];//请求日志开关
/// <summary>
/// 重写请求开始
/// </summary>
/// <param name="actionContext"></param>
public override void OnActionExecuting(HttpActionContext actionContext)
{
if(RequestLogSwitch.Trim()!="0")
{
try
{
RequestRecord item = new RequestRecord();
string reqArguments = string.Empty;//请求参数
if (actionContext.Request.Method.Method == "GET")
{
reqArguments = actionContext.Request.RequestUri.Query;
}
else if (actionContext.Request.Method.Method == "POST")
{
reqArguments =(actionContext.ActionArguments!=null&& actionContext.ActionArguments.Count > 0) ? actionContext.ActionArguments.JSONSerializeV3() : string.Empty;
}
item.RequestId = actionContext.Request.GetCorrelationId();//请求唯一标识
item.Type = 0;
item.BaseUrl = actionContext.Request.RequestUri.AbsolutePath;//请求地址
item.RequestMethod = actionContext.Request.Method.Method;//请求方式
item.ReqArguments = reqArguments;
item.BeginRequestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
string jsonStr = item.JSONSerializeV3();
var path = @"{0}Log\LogRequest\{1}\log.txt".FormatStr(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyy-MM-dd"));
StaticFunctions.WriteStringToFile(path, jsonStr, true, Encoding.UTF8);
}
catch(Exception ex) {
var path = @"{0}Log\LogRequestErr\{1}\log.txt".FormatStr(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyy-MM-dd"));
StaticFunctions.WriteStringToFile(path, "{0}==>发生异常了,异常信息为:{1}\r\n,异常描述为:{2}\r\n,异常位置:{3}\r\n".FormatStr(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), ex.Message, ex.InnerException.Message, ex.StackTrace), true, Encoding.UTF8);
}
}
base.OnActionExecuting(actionContext);
}
/// <summary>
/// 重写请求结束
/// </summary>
/// <param name="actionExecutedContext"></param>
public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
if (RequestLogSwitch.Trim() != "0")
{
string jsonStr = string.Empty;
try
{
RequestRecord item = new RequestRecord();
item.Type = 1;
item.RequestId = actionExecutedContext.Request.GetCorrelationId();
item.EndRequestTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
item.ResponseCode = actionExecutedContext.Response.StatusCode.GetInt();
jsonStr = item.JSONSerializeV3();
var path = @"{0}Log\LogRequest\{1}\log.txt".FormatStr(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyy-MM-dd"));
StaticFunctions.WriteStringToFile(path, jsonStr, true, Encoding.UTF8);
}
catch(Exception ex)
{
var path = @"{0}Log\LogRequestErr\{1}\log.txt".FormatStr(AppDomain.CurrentDomain.BaseDirectory, DateTime.Now.ToString("yyyy-MM-dd"));
StaticFunctions.WriteStringToFile(path, "{0}==>发生异常了,异常信息为:{1}\r\n,异常描述为:{2}\r\n,异常位置:{3}\r\n".FormatStr(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),ex.Message,ex.InnerException.Message,ex.StackTrace), true, Encoding.UTF8);
}
}
base.OnActionExecuted(actionExecutedContext);
}
}
(C#)日志接口请求响应时间的更多相关文章
- nginx日志打印请求响应时间
log_format timed_combined '$remote_addr - $remote_user [$time_local] "$request" ' '$stat ...
- nginx 查看接口请求时间 每个请求图片的时间或者文件的
根据nginx的access_log查看接口请求时间 muyuren 发表于 1年前 阅读 2300 收藏 0 推荐 0 评论 0 推荐 收藏 首先修改修改生成日志的格式,在nginx配置文件的htt ...
- Loadrunner模拟JSON接口请求进行测试
Loadrunner模拟JSON接口请求进行测试 一.loadrunner脚本创建 1.Insert - New step -选择Custom Request - web_custom_re ...
- 配置nginx,Tomcat日志记录请求耗时
由于公司的业务比较特殊,对速度比较在意,客户最近反应我们的平台时间比较久,处理一个请求十秒左右才返回,领导要求找出原因,我想让nginx日志记录请求处理用了多长时间,后端处理用了多长时间,总共用了多长 ...
- 接口测试-Java代码实现接口请求并封装
前言:在接口测试和Java开发中对接口请求方法进行封装都非常有必要,无论是在我们接口测试的时候还是在开发自测,以及调用某些第三方接口时,都能为我们调用和调试接口提供便捷: Java实现对http请求的 ...
- 利用 Bean Validation 来简化接口请求参数校验
团队新来了个校招实习生静静,相互交流后发现竟然是我母校同实验室的小学妹,小学妹很热情地认下了我这个失散多年的大湿哥,后来... 小学妹:大湿哥,咱们项目里的 Controller 怎么都看不到参数校验 ...
- Postman - 功能强大的 API 接口请求调试和管理工具
Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...
- xmlrpc实现bugzilla api调用(无会话保持功能,单一接口请求)
xmlrpc实现bugzilla4 xmlrpc api调用(无会话保持功能,单一接口请求),如需会话保持,请参考我的另外一篇随笔(bugzilla4的xmlrpc接口api调用实现分享: xml ...
- SoapUI接口测试·第一个HTTP Request接口请求和断言
一.新建SOAP项目 [File]-[New SOAP Project],在[Project Name]输入{工程名},点击[OK]. 二.新建TestSuite 选中项目,右键选择[New Te ...
随机推荐
- postgre索引
1.创建一般索引 单字段索引: CREATE INDEX index_name ON table_name (field1); 联合索引: CREATE INDEX index_name ON tab ...
- RN-进阶
ActivityIndicator 显示一个圆形的loading的提示符 react-native-tab-navigator npm install react-native-tab-navigat ...
- .net 上传文件
Controller层接收文件 参数 [FromServices] IHostingEnvironment env public IActionResult UploadFile([FromS ...
- Java——对象的复制、克隆、序列化
原创作者: https://blog.csdn.net/lmb55/article/details/78277878对象克隆(复制)假如说你想复制一个简单变量.很简单: int apples = 5; ...
- Python多线程thread、threading(一)
Python多线程(一) Python多线程,类似于同时执行多个不同程序,多线程运行的有点: 1.使用线程可以把占据长时间的程序中的任务放到后台去处理 2.用户界面可以更加吸引人,这样比如用户点击了一 ...
- 爬虫之requests
一.基本用法 1.GET请求 ①r=requests.get(url) --返回Response对象 def get(url, params=None, **kwargs): params={... ...
- 分布式一致性算法2PC和3PC
为了解决分布式一致性问题,产生了不少经典的分布式一致性算法,本文将介绍其中的2PC和3PC.2PC即Two-Phase Commit,译为二阶段提交协议.3PC即Three-Phase Commit, ...
- docker swarm 部署服务时,限制服务启动后所在的机器
借助容器技术,可以方便的在不同环境下部署服务,保证服务环境的一致性.docker swarm这个东西,可以方便的对容器进行编排管理. docker swarm集群中,有manager节点与worker ...
- base编码解码
function b64EncodeUnicode(str) { return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, func ...
- Delphi中Chrome Chromium、Cef3学习笔记(六)
原文 http://blog.csdn.net/xtfnpgy/article/details/71703317 一.CEF加载网页时空白 chrm1.Load(‘你的网址’); 出现空白,跟 ...