• 通过日志查看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: 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:UserslenmoAppDataLocalTempTemporary ASP.NET Filesvs89abac4879d00737assemblydl3a74c6d750e4889b_139bd301System.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:WINDOWSMicrosoft.NetassemblyGAC_MSILSystem.Numericsv4.0_4.0.0.0__b77a5c561934e089System.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());
  • 相关阅读:
    Go-闭包
    GO-数组与切片
    Go-包
    Go-for循环
    GO-逻辑判断(if,else if,else,switch)
    前后端分离的思考与实践(六)
    前后端分离的思考与实践(五)
    前后端分离的思考与实践(三)
    前后端分离的思考与实践(二)
    前后端分离的思考与实践(一)
  • 原文地址:https://www.cnblogs.com/lenmom/p/8607976.html
Copyright © 2020-2023  润新知