通过日志查看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. 于是有了让人晕头转向的配置.让人郁 ...
随机推荐
- git看不到别人创建的远程分支
解决办法: $ git fetch //取回所有分支(branch)的更新.如果只想取回特定分支的更新,可以指定分支名,例:$ git fetch <远程主机名> <分支名> ...
- 农历03__ZC
代码,改自 农历01(http://www.cnblogs.com/cppskill/p/5930558.html) 1.main.cpp #include "Lunar_ZC.h" ...
- 【转】IntelliJ IDEA的光芒会盖过Eclipse吗
作为一个资深的Eclipse用户,我想对IntelliJ IDEA做一个更为严谨的审视.JetBrains的工作人员非常的友善,并为Podcastpedia.org和Codingpedia.org这两 ...
- nodejs路由中:冒号
路由必看的博客博客,也是学习node必看的博客:http://www.open-open.com/lib/view/open1409929982338.html 下面是一些路由例子,以及与之相匹配的关 ...
- UVA-673 Parentheses Balance(栈)
题目大意:给一个括号串,看是否匹配. 题目分析:一开始用区间DP写的,超时了... 注意:空串合法. 代码如下: # include<iostream> # include<cstd ...
- 使用Bus.js进行兄弟(非父子)组件通信
首先需要在任意地方添加一个bus.js: 在bus.js里面 写入下面信息 import Vue from 'vue' export default new Vue; 在需要通信的组件都引入Bus.j ...
- 免费获取半年 Bitdefender Total Security 2014
免费获取半年 Bitdefender Total Security 2014,安装后剩余 200 天使用期.安装程序语言是德语,调包下安装语言应该也是可以的? 目前德国活动,Bitdefender T ...
- Beta阶段第1周/共2周 Scrum立会报告+燃尽图 06
作业要求与 [https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284] 相同 版本控制:https://git.coding.net/li ...
- 常用Mysql存储引擎--InnoDB和MyISAM简单总结
常用Mysql存储引擎--InnoDB和MyISAM简单总结 2013-04-19 10:21:52| 分类: CCST|举报|字号 订阅 MySQL服务器采用了模块化风格,各部分之间保持相 ...
- 汉诺塔的c++实现
void hanNuoTa(int n,int a,int b,int c) { ) return; hanNuoTa(n - , a, c, b); cout << n << ...