2011年9月1日 星期四

為ELMAH custom error page

ELMAH真是個記錄網站error的好工具
從NuGet下載安裝後
幾乎web.config都設定好了
不過我不想網站發生錯誤時,都跳出詳細的錯誤資訊給別人看
所以需要設定自訂錯誤頁

這時候,把web.config打開來
確認<configSections>有下面的資料(從NuGet安裝會自動幫你加)
<configSections>
    <sectionGroup name="elmah">
      <section name="security" requirePermission="false" type="Elmah.SecuritySectionHandler, Elmah" />
      <section name="errorLog" requirePermission="false" type="Elmah.ErrorLogSectionHandler, Elmah"  />
      <section name="errorMail" requirePermission="false" type="Elmah.ErrorMailSectionHandler, Elmah" />
      <section name="errorFilter" requirePermission="false" type="Elmah.ErrorFilterSectionHandler, Elmah" />     
    </sectionGroup>  
  </configSections>
再來是<httpModules>加上
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
 然後<httpHandlers>加上
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
以上是從NuGet安裝ELMAH後,會自動加上去的
再來就自己在<system.web> 區塊內加入
<customErrors mode="On" />
這裡可以指定你的錯誤頁,但是我目前預設是用View/Shared/Error.cshtml

還有在<configuration> section為你的xml log檔選個地方存檔
<elmah>
    <errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="D:/WebLog" />
  </elmah>
最後,確認一下Gobal.asax檔的RegisterRoutes method有沒有加上:
routes.IgnoreRoute( "elmah.axd" );  

按照上面的部份,照理說就可以work了
不過,我自己看官方文件的時候做完之後,是會導到自訂錯誤頁沒錯
可是看elmah.axd檔時,卻沒有任何error被log下來
後來發現我的web.conf檔有多了一個section
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
      <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" preCondition="managedHandler" />
      <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" preCondition="managedHandler" />
    </modules>
    <handlers>
      <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" />
    </handlers>
  </system.webServer>
把它拿掉之後,就可以了
目前還沒研究這一段有何功用
等改天研究好再PO出來

沒有留言:

張貼留言