27
2017
08

.Net页面格式化显示miniProfiler写在log文件中的日志

线上日志文本内容示例:

{"Id":"ff6cbd5b-d0ee-4edd-8251-5883134bbcbb","Name":"dianping/ExportExcel","Started":"2017-08-24 08:07:34","DurationMilliseconds":988683.0,"MachineName":"NET-MAG1","CustomLinks":null,"Root":{"Id":"6415d1db-d958-47e2-b02a-f7e829c99368","Name":"/ota/dianping/ExportExcel&&traceguid=baacf36b-b386-46d5-a491-f1aa05b2b9be","DurationMilliseconds":988683.0,"StartMilliseconds":0.0,"Children":[{"Id":"2c69b997-48bd-4ab6-a5fc-3937c72c24d9","Name":"BeginRequest","DurationMilliseconds":0.0,"StartMilliseconds":0.0,"Children":null,"CustomTimings":null},{"Id":"e38a16fe-30f0-488e-8b11-653cdbeec84b","Name":"T FromJsonTo#T(string jsonString)","DurationMilliseconds":0.0,"StartMilliseconds":1.0,"Children":null,"CustomTimings":null},{"Id":"22d5db87-25d6-49d1-bf42-05bab56cabf1","Name":"get appsetting key:SSO_SendRequest_Minutes","DurationMilliseconds":0.0,"StartMilliseconds":1.2,"Children":null,"CustomTimings":null},{"Id":"12ba90f5-eb47-4599-aef6-34d7466ef3b6","Name":"#164 Application_PostAuthenticateRequest","DurationMilliseconds":0.0,"StartMilliseconds":1.7,"Children":null,"CustomTimings":null},{"Id":"7754c112-706e-4679-b8a3-1c3bc1d7d931","Name":"#164 Application_AuthorizeRequest","DurationMilliseconds":0.0,"StartMilliseconds":1.8,"Children":null,"CustomTimings":null},{"Id":"ed91655f-8ceb-4e84-a5c9-65b9dc74029a","Name":"#164 Application_PostAuthorizeRequest","DurationMilliseconds":0.0,"StartMilliseconds":1.8,"Children":null,"CustomTimings":null},{"Id":"6a975156-fa5d-4c27-bd65-4ca98f0c1b33","Name":"#164 Application_ResolveRequestCache","DurationMilliseconds":0.0,"StartMilliseconds":1.9,"Children":null,"CustomTimings":null},{"Id":"65e4e3f4-4b15-477c-a813-e6797c26169b","Name":"#164 Application_PostResolveRequestCache","DurationMilliseconds":0.0,"StartMilliseconds":2.2,"Children":null,"CustomTimings":null},{"Id":"d43a4cd7-71e9-416c-a73a-9db845e7671f","Name":"#164 Application_MapRequestHandler","DurationMilliseconds":0.0,"StartMilliseconds":2.2,"Children":null,"CustomTimings":null},{"Id":"dd04a246-ebb3-4054-9e4e-467346ee5fd2","Name":"#164 Application_PostMapRequestHandler","DurationMilliseconds":0.0,"StartMilliseconds":2.3,"Children":null,"CustomTimings":null},{"Id":"8bb20b5d-ad42-4f1d-8a93-1c00f25c67ba","Name":"GetCache(string key):CacheSession_kcb3o05sms552sgfmwbtqbek","DurationMilliseconds":0.3,"StartMilliseconds":2.3,"Children":null,"CustomTimings":null},{"Id":"7fde510e-c819-4863-a2f1-b72842e9a094","Name":"#164 Application_AcquireRequestState","DurationMilliseconds":0.0,"StartMilliseconds":2.9,"Children":null,"CustomTimings":null},{"Id":"11cbd319-07eb-42ce-bdd6-24516ed6ed19","Name":"#164 Application_PostAcquireRequestState","DurationMilliseconds":0.0,"StartMilliseconds":2.9,"Children":null,"CustomTimings":null},{"Id":"3d05aecb-9b76-4ffc-9c8a-ea15c55a4aac","Name":"#164 Application_PreRequestHandlerExecute","DurationMilliseconds":0.0,"StartMilliseconds":2.9,"Children":null,"CustomTimings":null},{"Id":"bc8e6fd1-a8c3-408d-9513-568a51976c46","Name":"MEF_GetService, Kulv.YCF.AdminWeb.Areas.OTA.Controllers.DianPingController","DurationMilliseconds":1.2,"StartMilliseconds":3.2,"Children":null,"CustomTimings":null},{"Id":"3283bbf3-a67a-4385-b478-36b7bc8b9dfb","Name":"MEF_GetService, System.Web.Mvc.FilterAttribute[]","DurationMilliseconds":0.2,"StartMilliseconds":4.5,"Children":null,"CustomTimings":null},{"Id":"78d60a54-0455-4063-990d-4acace9a4e3d","Name":"MEF_GetService, System.Web.Mvc.FilterAttribute[]","DurationMilliseconds":0.1,"StartMilliseconds":4.8,"Children":null,"CustomTimings":null},{"Id":"9c5d1d97-4ebe-435a-abdc-0a55f43b48ce","Name":"MEF_GetService, System.Web.Mvc.FilterAttribute[]","DurationMilliseconds":0.1,"StartMilliseconds":5.1,"Children":null,"CustomTimings":null},{"Id":"39aab91d-ecfb-4fe8-9971-1b2bc06c70f7","Name":"MEF_GetService, Kulv.YCF.Web.BLL.Account.IAccountContract","DurationMilliseconds":0.0,"StartMilliseconds":5.2,"Children":null,"CustomTimings":null},{"Id":"0ace486b-7dd7-4db0-a8fe-5cd36b59eea9","Name":"get appsetting key:B2BURLWhiteList","DurationMilliseconds":0.0,"StartMilliseconds":5.3,"Children":null,"CustomTimings":null},{"Id":"839befae-3ae9-40e4-bf64-b2cc28c2d7b7","Name":"MEF_GetService, System.Int32","DurationMilliseconds":0.0,"StartMilliseconds":5.4,"Children":null,"CustomTimings":null},{"Id":"5356ed25-ba66-453e-ae53-2d911de881a0","Name":"#164 Application_PreSendRequestContent","DurationMilliseconds":0.0,"StartMilliseconds":988628.2,"Children":null,"CustomTimings":null},{"Id":"61f7a187-c5ec-4387-9fa4-868e24454440","Name":"#164 Application_PreSendRequestHeaders","DurationMilliseconds":0.0,"StartMilliseconds":988628.2,"Children":null,"CustomTimings":null},{"Id":"14e07fea-4503-4d4e-9040-a2529a45cdf9","Name":"#164 Application_LogRequest","DurationMilliseconds":0.0,"StartMilliseconds":988682.8,"Children":null,"CustomTimings":null},{"Id":"4291de5c-9e90-47de-8834-08578158c758","Name":"#164 Application_PostLogRequest","DurationMilliseconds":0.0,"StartMilliseconds":988682.8,"Children":null,"CustomTimings":null},{"Id":"c64ada7a-d1ec-452c-a61d-81a29752c2f4","Name":"EndRequest","DurationMilliseconds":0.0,"StartMilliseconds":988683.0,"Children":null,"CustomTimings":null}],"CustomTimings":{"sql":[{"Id":"ebfd2eb1-51d8-4707-a842-9f203d8fe994","CommandString":"/*   at Kulv.YCF.Core.DCPModule.DCPCooperatorItemCore.Impl.TPCooperatorGoodsService.GetOTAExportData(Int32 channelId, Int32 liuliangId)*/\nSELECT \r\n    [Extent1].[ChannelLinkId] AS [ChannelLinkId], \r\n    [Extent1].[OuterTitle] AS [OuterTitle], \r\n    [Extent1].[StartDate] AS [StartDate], \r\n    [Extent1].[EndDate] AS [EndDate], \r\n    [Extent4].[PackageName] AS [PackageName], \r\n    [Extent4].[ProductPackageId] AS [ProductPackageId], \r\n    [Extent7].[ProductName] AS [ProductName], \r\n    [Extent7].[ProductId] AS [ProductId], \r\n    [Extent2].[GoodsStatus] AS [GoodsStatus], \r\n    [Extent9].[UserName] AS [UserName], \r\n    [Extent9].[CellPhone] AS [CellPhone], \r\n    [Extent9].[LoginId] AS [LoginId], \r\n    [Extent8].[ProvinceName] AS [ProvinceName]\r\n    FROM         [dbo].[ChannelLink] AS [Extent1] WITH(NOLOCK)\r\n    LEFT OUTER JOIN [dbo].[TPGoodsMapping] AS [Extent2] WITH(NOLOCK) ON [Extent1].[ChannelLinkId] = [Extent2].[ChannelLinkId]\r\n    INNER JOIN [dbo].[ChannelPackageMapping] AS [Extent3] WITH(NOLOCK) ON [Extent1].[ChannelLinkId] = [Extent3].[ChannelLinkId]\r\n    INNER JOIN [dbo].[ProductPackage] AS [Extent4] WITH(NOLOCK) ON [Extent3].[ProductPackageId] = [Extent4].[ProductPackageId]\r\n    INNER JOIN [dbo].[PackageItem] AS [Extent5] WITH(NOLOCK) ON [Extent4].[ProductPackageId] = [Extent5].[ProductPackageId]\r\n    INNER JOIN [dbo].[ProductItem] AS [Extent6] WITH(NOLOCK) ON [Extent5].[ItemId] = [Extent6].[ItemId]\r\n    INNER JOIN [dbo].[Product] AS [Extent7] WITH(NOLOCK) ON [Extent6].[ProductId] = [Extent7].[ProductId]\r\n    INNER JOIN [dbo].[Province] AS [Extent8] WITH(NOLOCK) ON [Extent7].[ProvinceId] = [Extent8].[ProvinceId]\r\n    INNER JOIN [dbo].[SysUser] AS [Extent9] WITH(NOLOCK) ON [Extent1].[LiuLiangId] = [Extent9].[LoginId]\r\n    WHERE [Extent1].[ChannelId] = @p__linq__0","ExecuteType":"Reader","StackTraceSnippet":"GetOTAExportData ExportExcel","StartMilliseconds":90.1,"DurationMilliseconds":3812.3,"FirstFetchDurationMilliseconds":1494.9}]}},"ClientTimings":null,"User":"10.13.2.186 - 10.205.0.254","HasUserViewed":false}

这内容是文本文件无格式的,人眼看起来不容易分析。


下面来做一个测试站点显示日志:

使用方法参考官方站点: http://miniprofiler.com/

1、这边先建立一个.Net MVC,.NETFramework,Version=v4.5.2解决方案:ShowMiniProfiler

2、依次安装包:

Install-Package MiniProfiler
Install-Package MiniProfiler.EF6
Install-Package MiniProfiler.MVC4

3、找个miniprofiler-includes.js:http://cdn01.pukuimin.top/Scripts/miniprofiler-includes.js  ,放到 Scripts目录中。


4、改web.config:

  <system.webServer>

  
    <handlers>
      <add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
    </handlers>
  </system.webServer>

5、改Global.asax

        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            MiniProfilerEF6.Initialize();
        }
        protected void Application_BeginRequest()
        {
            //if (Request.IsLocal)
            {
                MiniProfiler.Start();
            }
        }
        protected void Application_EndRequest()
        {
            MiniProfiler.Stop();
        }

6、然后建立一个页面显示就行了,Index.cshtml:

@{
    Layout = null;
}
<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title></title>
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/modernizr-2.6.2.js"></script>
    <script src="~/Scripts/bootstrap.min.js"></script>
    <link href="~/Content/bootstrap.min.css" rel="stylesheet" />
    <link href="~/mini-profiler-resources/includes.css" rel="stylesheet" />
    <script type="text/javascript">
        var profiler = { "Id": "851ecefb-7f8d-445d-ae92-3bd5f37a39f4", "Name": null, "Started": "2017-08-28T06:45:47.0427279Z", "DurationMilliseconds": 0.0, "MachineName": "test", "CustomLinks": null, "Root": { "Id": "1647b9b8-1b5c-4d19-b143-38d5beff71e7", "Name": "showminiprofiler", "DurationMilliseconds": null, "StartMilliseconds": 0.0, "Children": null, "CustomTimings": null }, "ClientTimings": null, "User": "121.33.210.162", "HasUserViewed": false };
    </script>
    <script async type="text/javascript" id="mini-profiler" src="~/Scripts/miniprofiler-includes.js"
            data-path="/mini-profiler-resources/"
            data-position="left" data-trivial="true" data-children="true"
            data-max-traces="15" data-controls="false" data-authorized="true" data-toggle-shortcut="Alt+P"
            data-start-hidden="false" data-trivial-milliseconds="2"></script>
</head>
<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container" style="margin:10px auto;">
            <form action="###" method="post">
                <div class="well " style="margin-top:10px;margin-bottom:auto;padding: 5px;" id="divProfileText">
                    <textarea class="form-control" style="height: 240px;" id="txtProfileText"></textarea>
                </div>
                <script>
        $(function () {
            $('#txtProfileText').change(function () {
                var json = $.parseJSON($('#txtProfileText').val());
                if (json) {
                    profiler = json;
                    $('div.profiler-result-full').empty();
                    MiniProfiler.initFullView();
                }
            });
        });
                </script>
            </form>
        </div>
    </div>
    <div class="container body-content">
        <div class="profiler-result-full" style="margin-top:325px;">
        </div>
        <hr />
    </div>
    <footer></footer>
</body>
</html>


然后运行,把miniprofile日志粘贴到文本框中,效果:

这样,就和页面上直接显示性能分析效果一样了,这种就是程序自动记录到日志,事后分析用的。

记录miniprofiler日志参考:http://www.pukuimin.top/post/91.html


参考代码:ShowMiniProfiler.zip



版权声明:
作者:真爱无限 出处:http://www.pukuimin.top 本文为博主原创文章版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接.
« 上一篇下一篇 »

相关文章:

评论列表:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。