網頁

2011年10月11日 星期二

ASP.NET MVC 使用Glimpse監測網站的一舉一動 3 - 結合ELMAH


其實glimpse可以結合ELMAH,讓ELMAH所記錄到的錯誤訊息於glimpse中顯示,在系統的登入認證後,只要啟用glimpse就可以去看ELMAH的紀錄資料,不必再另外進入ELMAH,接下來介紹如何透過NuGet安裝Elmah plugin for Glimpse以及部分的修改設定。

請記得,你的網站必須示已經安裝了 ELMAH 以及 Glimpse


NuGet 安裝「Elmah plugin for Glimpse」

於NuGet中搜尋Glimpse就可以找到「Elmah plugin for Glimpse」

image

 

安裝完成之後,在你的網站上開啟glimpse後就可以在glimpse的功能視窗中看到「Elmah」的頁籤,

image

如果我們把glimpse的視窗給拉長一點,可以看到Elmah頁籤的最下面會出現分頁的功能按鍵,

image

但是當我們去按這些按鍵時,會發現到根本沒有作用,於是在「Elmah plugin for Glimpse @ CodePlex」上面有看到,「After installing the package you still have to include the Elmah for Glimpse client side script on your pages, preferable in your main master page.」

<script src="<%: Url.Content("~/Glimpse/Resource/?resource=Pager") %>" type="text/javascript"></script>

於是我們可以在Site.Master中去加入這一段include Script的語法,重新執行網站…

BUT !!! It’s Still Not Work!!! Why?~~

看看Firebug的錯誤訊息…

image

image

原來是找不到「http://你的網站/Glimpse/Resource/?resource=Pager」,於是我在VS2010中去找尋網站中有沒有Glimpse/Resourse,但是我就是怎麼找就是找不到,所以我就用了另外一個方式來解決這個Elmah頁籤的分頁問題,我在Elmah plugin for Glimpse的原始碼裡面去找到有關分頁的Script:

jQuery.glimpseElmah = {};
jQuery.extend(jQuery.glimpseElmah, {
    loadPage: function (pageIndex, pageSize)
    {
        var that = this;
        var static = that.static;
        jQuery.ajax({
            url: static.link,
            type: 'GET',
            data: { 'pageIndex': pageIndex, 'pageSize': pageSize },
            contentType: 'application/json',
            cache: false,
            success: function (data, textStatus, jqXHR)
            {
                that.refreshTab(static.key, data);
            },
            error: function (jqXHR, textStatus, errorThrown)
            {
                alert('error');
            }
        });
    },
    refreshTab: function (key, data)
    {
        var panelHolder = window.jQueryGlimpse.glimpse.static.panelHolder();
        var tabContentPlaceHolder = jQuery('.glimpse-panelitem-' + key, panelHolder);
        tabContentPlaceHolder.empty();
        var tabContent = window.jQueryGlimpse.glimpseProcessor.build(data, 0);
        tabContentPlaceHolder.html(tabContent);
    },
    static: {
        key: 'Elmah',
        link: '/Glimpse.axd?r=Elmah'
    }
});

我們把這段Script給另存到「~/Scripts/Glimpse.Elmah.Pager.js」,然後再去include這個Script檔案,

<script src="<%: Url.Content("~/Scripts/Glimpse.Elmah.Pager.js") %>" type="text/javascript"></script>

Glimpse 的Elmah頁籤分頁功能就可以正常執行了,

image

 

分頁Script的正確路徑

但其實後來想想,Glimpse的Elmah頁籤的分頁圖示都可以出得來,沒道理會漏掉分頁的Script呀,於是後來再去找找Resouce的真正路徑後,才發現到,官網上面給的資訊有誤,應該要改成下面的路徑,

http://你的網站/Glimpse.axd?r=Pager&resource=Pager

所以就把include Script的路徑做了修改,

<script src="<%: Url.Content("~/Glimpse.axd?r=Pager&resource=Pager") %>" type="text/javascript"></script>

重新執行網站,就可以看到載入正常無誤,

image

而分頁功能也正常無誤,

image

 

查看Elmah的Details

在Elmah頁籤裡去點擊View,可以去查看某項錯誤訊息的Details,因為View的連結是指向「http://你的網站/elmah.axd」

image

為了資料的安全性,請務必確認你的Elmah安全設定是否已經做好,在「ASP.NET MVC + ELMAH 監控並記錄你的網站錯誤資訊 2」有說明如何在Web.Config去修改Elmah的設定,請記得對路徑「elmah.axd」的讀取是一定要經過通過登入權限的認證,最好是要限定某些角色權限的人才可以瀏覽,像以下的設定就是拒絕匿名使用者並且只限定具有「Admin」角色權限的已登入使用者才可以瀏覽elmah.axd。

  <elmah>
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data/Elmah.Errors" />
  <security allowRemoteAccess="yes" />
  </elmah>
  <location path="elmah.axd">
    <system.web>
      <authorization>
        <allow roles="Admin"/>
        <deny users="*"/>
      </authorization>
    </system.web>
  </location>

 

參考連結:

Elmah plugin for Glimpse @ CodePlex

Elmah for Glimpse – Best of Both Worlds @ CodeProject

Elmah plugin for Glimpse @ nuget gallery

 

以上

沒有留言:

張貼留言