從NuGet下載安裝後
幾乎web.config都設定好了
不過我不想網站發生錯誤時,都跳出詳細的錯誤資訊給別人看
所以需要設定自訂錯誤頁
這時候,把web.config打開來
確認<configSections>有下面的資料(從NuGet安裝會自動幫你加)
<configSections>再來是<httpModules>加上
<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>
<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>最後,確認一下Gobal.asax檔的RegisterRoutes method有沒有加上:
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="D:/WebLog" />
</elmah>
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出來
沒有留言:
張貼留言