通过日志查看Web Api详细运行过程
1. 通过Nuget安装System.Web.Http.Tracing.

2. 通过HttpConfiguration,注册SystemDiagnosticsTraceWriter
public static void Register(HttpConfiguration config)
{
// Web API configuration and services // Web API routes
config.MapHttpAttributeRoutes(); config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
); config.Filters.Add(new ValidateModelStateFilter());
FluentValidationModelValidatorProvider.Configure(config); //regular registration
config.Services.Replace(typeof(ITraceWriter), new SystemDiagnosticsTraceWriter());
//through an extension method
config.EnableSystemDiagnosticsTracing();
}
3. 运行,即可看到整个运行过程的信息日志信息,通过日志信息可以窥探WebApi的运行内核信息。
发送请求:

输出信息为:
iisexpress.exe Information: : Request, Method=POST, Url=http://localhost:52187/api/default/, Message='http://localhost:52187/api/default/'
“iisexpress.exe”(CLR v4.0.30319: /LM/W3SVC//ROOT--): 已加载“C:\Users\lenmo\AppData\Local\Temp\Temporary ASP.NET Files\vs\89abac48\79d00737\assembly\dl3\a74c6d75\00e4889b_139bd301\System.Web.Http.resources.dll”。模块已生成,不包含符号。
iisexpress.exe Information: : Message='Default', Operation=DefaultHttpControllerSelector.SelectController
iisexpress.exe Information: : Message='WebApplication1.Controllers.DefaultController', Operation=DefaultHttpControllerActivator.Create
iisexpress.exe Information: : Message='WebApplication1.Controllers.DefaultController', Operation=HttpControllerDescriptor.CreateController
iisexpress.exe Information: : Message='所选操作“Post(UserModel user)”', Operation=ApiControllerActionSelector.SelectAction
“iisexpress.exe”(CLR v4.0.30319: /LM/W3SVC//ROOT--): 已加载“C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll”。已跳过加载符号。模块进行了优化,并且调试器选项“仅我的代码”已启用。
iisexpress.exe Information: : Message='读取的值=“WebApplication1.Controllers.UserModel”', Operation=JsonMediaTypeFormatter.ReadFromStreamAsync
iisexpress.exe Information: : Message='参数“user”已绑定到值“WebApplication1.Controllers.UserModel”', Operation=FormatterParameterBinding.ExecuteBindingAsync
iisexpress.exe Information: : Message='模型状态无效。user.Password: Please specify a first name', Operation=HttpActionBinding.ExecuteBindingAsync
iisexpress.exe Information: : Message='将使用同一“JsonMediaTypeFormatter”格式化程序', Operation=JsonMediaTypeFormatter.GetPerRequestFormatterInstance
iisexpress.exe Information: : Message='所选格式化程序=“JsonMediaTypeFormatter”,content-type=“application/json; charset=utf-8”', Operation=DefaultContentNegotiator.Negotiate
iisexpress.exe Information: : Operation=ValidateModelStateFilter.OnActionExecutingAsync, Status= (BadRequest)
iisexpress.exe Information: : Operation=DefaultController.ExecuteAsync, Status= (BadRequest)
iisexpress.exe Information: : Response, Status= (BadRequest), Method=POST, Url=http://localhost:52187/api/default/, Message='Content-type=“application/json; charset=utf-8”,content-length=未知'
iisexpress.exe Information: : Operation=JsonMediaTypeFormatter.WriteToStreamAsync
iisexpress.exe Information: : Operation=DefaultController.Dispose
注意: 通过示例注册代码,默认将打印所有的运行日志,如果希望对日志进行筛选,可以通过以下方式:
//regular registration
config.Services.Replace(typeof(ITraceWriter), new SystemDiagnosticsTraceWriter() { MinimumLevel= TraceLevel.Error});
//through an extension method
config.EnableSystemDiagnosticsTracing();
默认的注册方式为: Info,即打印所有信息出来。TraceLevel的定义为:
//
// 摘要:
// 指定跟踪级别的枚举。
public enum TraceLevel
{
//
// 摘要:
// 已禁用跟踪。
Off = ,
//
// 摘要:
// 调试跟踪的跟踪级别。
Debug = ,
//
// 摘要:
// 信息跟踪的跟踪级别。
Info = ,
//
// 摘要:
// 警告跟踪的跟踪级别。
Warn = ,
//
// 摘要:
// 错误跟踪的跟踪级别。
Error = ,
//
// 摘要:
// 严重跟踪的跟踪级别。
Fatal =
}
也可以使用第三方的日志组件用于输出运行时信息:如
WebApiContrib.Tracing.Log4Net
WebApiContrib.Tracing.Nlog
安装方法,Nuget:
install-package WebApiContrib.Tracing.Nlog
install-package WebApiContrib.Tracing.Log4Net
注册代码类似:
httpConfiguration.Services.Replace(typeof(ITraceWriter), new NlogTraceWriter());
通过日志查看Web Api详细运行过程的更多相关文章
- ASP.NET Web API 控制器创建过程(一)
ASP.NET Web API 控制器创建过程(一) 前言 在前面对管道.路由有了基础的了解过后,本篇将带大家一起学习一下在ASP.NET Web API中控制器的创建过程,这过程分为几个部分下面的内 ...
- ASP.NET Web API 控制器执行过程(一)
ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...
- ASP.NET Web API 控制器创建过程(二)
ASP.NET Web API 控制器创建过程(二) 前言 本来这篇随笔应该是在上周就该写出来发布的,由于身体跟不上节奏感冒发烧有心无力,这种天气感冒发烧生不如死,也真正的体会到了什么叫病来如山倒,病 ...
- IDEA整合日志框架Log4j2+Slf4j详细配置过程
日志框架这么多,他们之间到底是什么关系呢?笼统的讲就是slf4j是一系列的日志接口,而log4j2.logback是具体实现了接口功能的日志框架.现在的主流日志接口都使用slf4j,而日志的实现就见仁 ...
- ASP.NET Web API 控制器执行过程
http://www.cnblogs.com/jin-yuan/p/3952605.html
- 使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例)
作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何基于dotnet core(微软.NET的最新版本,支持跨平台,跨设备的应用开发,详情请参考 https ...
- devOps开发(Web API 实例)dotnet core 和 Azure PaaS服务
使用 dotnet core 和 Azure PaaS服务进行devOps开发(Web API 实例) 作者:陈希章 发表于 2017年12月19日 引子 这一篇文章将用一个完整的实例,给大家介绍如何 ...
- 关于操作 ASP.NET Web API的实例
WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...
- HttpClient + ASP.NET Web API, WCF之外的另一个选择
WCF的野心造成了它的庞大复杂,HTTP的单纯造就了它的简单优美.为了实现分布式Web应用,我们不得不将两者凑合在一起 —— WCF服务以HTTP绑定宿主于IIS. 于是有了让人晕头转向的配置.让人郁 ...
随机推荐
- BZOJ 3123 【SDOI2013】 森林
题目链接:森林 这道题想法很显然.既然只有加边而没有删边,那么每次启发式合并就可以了.查询路径\(k\)小似乎需要主席树,那么把主席树和倍增表一起暴力重构就好了. 然后发现这样的空间复杂度是\(O(n ...
- Idea使用(摘抄至java后端技术公众号-孤独烟)
1. idea自动编译需要手动开启: 2. 手动去掉idea自动提示时候不区分字母大小写 3. idea自动导入包 4. 悬浮开关提示:鼠标放上去就给出提示 5. 打开的所有类tabs换行显示,不单行 ...
- Hive之GROUP BY详解
一,GROUP BY 执行理解 先来看下表1,表名为test: 表1 执行如下SQL语句: SELECT name from test GROUP BY name ; 你应该很容易知道运行的结果, ...
- LINUX QQ
查询龙井QQ http://www.longene.org/forum/viewtopic.php?f=6&t=4700
- 简述 AJAX 及基本步骤
简述 AJAX:AJAX即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),是指一种创建交互式网页应用的网页开发技术.通过在后台与服务器进行 ...
- Beta阶段第1周/共2周 Scrum立会报告+燃尽图 01
作业要求[https://edu.cnblogs.com/campus/nenu/2018fall/homework/2383] 版本控制:https://git.coding.net/liuyy08 ...
- PostgreSQL psql中如何查看快捷功能的对应函数
在psql中,我们可以通过一系列的的快捷命令查看数据库元素,如:\d 查看当前搜索路径下的表,那么内部用到的SQL语句是什么呢,可以通过命令来设置是否打印出来: apple=# \set ECHO_H ...
- C++的explicit关键字
C++程序员对于explicit这个关键字其实不是很熟悉,至少我是如此:原因在于其使用范围不大,而且作用也没有那么大. 但是这不是说明我们的程序中不需要这个关键字,按Google的C++编程规范和Ef ...
- Linux运维学习笔记-定时任务知识总结
定时任务编辑规范流程: 重要知识点: 切记用全路径编写定时脚本.定时任务 大部分在 crontab 计划任务中都会年到未尾带 >/dev/null 2>&1,是什么意思呢? > ...
- ps cs6破解
http://www.cnit618.com/html/rjxz/yyrj/3011.htm 这个破解方法太简单.注:文中最后给出补丁.我用了方法二破解:代替amtlib.dll.一下子就可以.