日志接口响应时间,记录接口请求信息,响应结果以及响应时间等。可以清楚的分析和了解接口状态。

如果一个一个地在接口下面做日志,那不是我们想要的结果。所以,我们选择做一个特性来控制接口要不要记录请求响应日志。

关键代码如下:

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#)日志接口请求响应时间的更多相关文章

  1. nginx日志打印请求响应时间

    log_format  timed_combined  '$remote_addr - $remote_user [$time_local] "$request" ' '$stat ...

  2. nginx 查看接口请求时间 每个请求图片的时间或者文件的

    根据nginx的access_log查看接口请求时间 muyuren 发表于 1年前 阅读 2300 收藏 0 推荐 0 评论 0 推荐 收藏 首先修改修改生成日志的格式,在nginx配置文件的htt ...

  3. Loadrunner模拟JSON接口请求进行测试

    Loadrunner模拟JSON接口请求进行测试     一.loadrunner脚本创建 1.Insert - New step -选择Custom Request -  web_custom_re ...

  4. 配置nginx,Tomcat日志记录请求耗时

    由于公司的业务比较特殊,对速度比较在意,客户最近反应我们的平台时间比较久,处理一个请求十秒左右才返回,领导要求找出原因,我想让nginx日志记录请求处理用了多长时间,后端处理用了多长时间,总共用了多长 ...

  5. 接口测试-Java代码实现接口请求并封装

    前言:在接口测试和Java开发中对接口请求方法进行封装都非常有必要,无论是在我们接口测试的时候还是在开发自测,以及调用某些第三方接口时,都能为我们调用和调试接口提供便捷: Java实现对http请求的 ...

  6. 利用 Bean Validation 来简化接口请求参数校验

    团队新来了个校招实习生静静,相互交流后发现竟然是我母校同实验室的小学妹,小学妹很热情地认下了我这个失散多年的大湿哥,后来... 小学妹:大湿哥,咱们项目里的 Controller 怎么都看不到参数校验 ...

  7. Postman - 功能强大的 API 接口请求调试和管理工具

    Postman 是一款功能强大的的 Chrome 应用,可以便捷的调试接口.前端开发人员在开发或者调试 Web 程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的 Fi ...

  8. xmlrpc实现bugzilla api调用(无会话保持功能,单一接口请求)

    xmlrpc实现bugzilla4   xmlrpc api调用(无会话保持功能,单一接口请求),如需会话保持,请参考我的另外一篇随笔(bugzilla4的xmlrpc接口api调用实现分享: xml ...

  9. SoapUI接口测试·第一个HTTP Request接口请求和断言

    一.新建SOAP项目 [File]-[New SOAP Project],在[Project Name]输入{工程名},点击[OK].   二.新建TestSuite 选中项目,右键选择[New Te ...

随机推荐

  1. Python Excel 多sheet 多条数据 自定义写入

    pip install xlwt python excel 数据写入操作,处理网站数据导出以及不是太多数据的爬虫存储, 用处蛮多的轮子. (150+++++++++++++++++++++++++++ ...

  2. Python爬虫的步骤和工具

    #四个步骤 1.查看crawl内容的源码格式          crawl的内容可以是 url(链接),文字,图片,视频 2.请求网页源码 (可能要设置)代理,限速,cookie 3.匹配 用正则表达 ...

  3. all-document

    1.memorymanagement-whitepaper J2SE5.0 JVM 垃圾回收器相关英文 链接: https://pan.baidu.com/s/1mzkMxuFE82sfeVOToMb ...

  4. docker:学习笔记

    docker run -itd --net=none 22565cef72c2 /usr/sbin/sshd -Dpipework br0 5a3e7bab4c5c5260a93e153aa7fec3 ...

  5. python 获取中文拼音首字母;判断文件夹是否存在

    1.如何获取中文字符串的首字母 import pinyin #输入name def get_pinyin_first_alpha(name): return "".join([i[ ...

  6. hadoop 二次排序的一些思考

    先说一下mr的二次排序需求: 假如文件有两列分别为name.score,需求是先按照name排序,name相同按照score排序 数据如下: jx 20 gj 30 jx 10 gj 15 输出结果要 ...

  7. django之注册登录

    清理session数据,自此django的认证登陆登出功能完成,但是此处有个问题,就是当用户在手动关闭浏览器的时候,session数据不会自动失效,数据库的session数据也不会自动删除,所以需要在 ...

  8. Mybatis学习 day02

    第十六章回顾SQL99中的连接查询 1)内连接 2)外连接 3)自连接 第十七章回顾hibernate多表开发 1)一对一 2)一对多 3)多对多 第十八章 mybatis一对一映射[学生与身份证] ...

  9. laravel5.6中Session store not set on request问题如何解决

    先找到文件app下的Kernel.php文件,在文件中加入下列代码 protected $middleware = [ \Illuminate\Foundation\Http\Middleware\C ...

  10. React 获取服务器API接口数据:axios、fetchJsonp

    使用axios.fetchJsonp获取服务器的接口数据.其中fetchJsonp是跨域访问 一.使用axios 1.安装axios模块 npm install --save axios 2.引用模块 ...