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: 0 : Request, Method=POST, Url=http://localhost:52187/api/default/, Message='http://localhost:52187/api/default/' “iisexpress.exe”(CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-131659877920590491): 已加載“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: 0 : Message='Default', Operation=DefaultHttpControllerSelector.SelectController iisexpress.exe Information: 0 : Message='WebApplication1.Controllers.DefaultController', Operation=DefaultHttpControllerActivator.Create iisexpress.exe Information: 0 : Message='WebApplication1.Controllers.DefaultController', Operation=HttpControllerDescriptor.CreateController iisexpress.exe Information: 0 : Message='所選操作“Post(UserModel user)”', Operation=ApiControllerActionSelector.SelectAction “iisexpress.exe”(CLR v4.0.30319: /LM/W3SVC/2/ROOT-1-131659877920590491): 已加載“C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System.Numerics\v4.0_4.0.0.0__b77a5c561934e089\System.Numerics.dll”。已跳過加載符號。模塊進行了優化,並且調試器選項“僅我的代碼”已啟用。 iisexpress.exe Information: 0 : Message='讀取的值=“WebApplication1.Controllers.UserModel”', Operation=JsonMediaTypeFormatter.ReadFromStreamAsync iisexpress.exe Information: 0 : Message='參數“user”已綁定到值“WebApplication1.Controllers.UserModel”', Operation=FormatterParameterBinding.ExecuteBindingAsync iisexpress.exe Information: 0 : Message='模型狀態無效。user.Password: Please specify a first name', Operation=HttpActionBinding.ExecuteBindingAsync iisexpress.exe Information: 0 : Message='將使用同一“JsonMediaTypeFormatter”格式化程序', Operation=JsonMediaTypeFormatter.GetPerRequestFormatterInstance iisexpress.exe Information: 0 : Message='所選格式化程序=“JsonMediaTypeFormatter”,content-type=“application/json; charset=utf-8”', Operation=DefaultContentNegotiator.Negotiate iisexpress.exe Information: 0 : Operation=ValidateModelStateFilter.OnActionExecutingAsync, Status=400 (BadRequest) iisexpress.exe Information: 0 : Operation=DefaultController.ExecuteAsync, Status=400 (BadRequest) iisexpress.exe Information: 0 : Response, Status=400 (BadRequest), Method=POST, Url=http://localhost:52187/api/default/, Message='Content-type=“application/json; charset=utf-8”,content-length=未知' iisexpress.exe Information: 0 : Operation=JsonMediaTypeFormatter.WriteToStreamAsync iisexpress.exe Information: 0 : 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 = 0, // // 摘要: // 調試跟蹤的跟蹤級別。 Debug = 1, // // 摘要: // 信息跟蹤的跟蹤級別。 Info = 2, // // 摘要: // 警告跟蹤的跟蹤級別。 Warn = 3, // // 摘要: // 錯誤跟蹤的跟蹤級別。 Error = 4, // // 摘要: // 嚴重跟蹤的跟蹤級別。 Fatal = 5 }
也可以使用第三方的日志組件用於輸出運行時信息:如
WebApiContrib.Tracing.Log4Net
WebApiContrib.Tracing.Nlog
安裝方法,Nuget:
install-package WebApiContrib.Tracing.Nlog
install-package WebApiContrib.Tracing.Log4Net
注冊代碼類似:
httpConfiguration.Services.Replace(typeof(ITraceWriter), new NlogTraceWriter());