2010-09-03 32 views
2

我在Elmah中啓用了錯誤日誌篩選,並且希望在ErrorLog_Filtering事件處理程序中以編程方式執行它。它在Visual Studio dev服務器下運行良好,但是一旦我進入IIS7(本地開發機器或遠程Web服務器),處理程序不會被調用(錯誤日誌記錄工作正常)。Elmah:在IIS7下未調用ErrorLog_Filtering事件處理程序

這是我一貫的web.config:

<configuration> 

    <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" /> 
     <section name="errorTweet" requirePermission="false" type="Elmah.ErrorTweetSectionHandler, Elmah" /> 
    </sectionGroup> 
    </configSections> 

    <elmah> 
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ShopMvcConnectionString" /> 
    </elmah> 

    <system.web> 

    <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </httpHandlers> 

    <httpModules> 
     <add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 

    </system.web> 

    <system.webServer> 

    <modules runAllManagedModulesForAllRequests="true"> 
     <add name="Elmah.ErrorLog" type="Elmah.ErrorLogModule, Elmah" preCondition="managedHandler" /> 
     <add name="Elmah.ErrorFilter" type="Elmah.ErrorFilterModule" preCondition="managedHandler" /> 
    </modules> 

    <handlers> 
     <add name="Elmah" path="elmah.axd" verb="POST,GET,HEAD" type="Elmah.ErrorLogPageFactory, Elmah" preCondition="integratedMode" /> 
    </handlers> 
    </system.webServer> 

</configuration> 

和我的處理程序中的Global.asax:

public void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e) 
{ 
} 

回答

7

您在不處理IIS 7下被調用的原因是因爲你命名模塊不同。您在system.web/httpModules之下將其命名爲ErrorLog,然後在system.webServer/modules之下將其命名爲Elmah.ErrorLog

Handling module events in Global.asax通過命名約定工作,其中事件處理程序必須在配置中找到的模塊名稱後面加上下劃線(_),後面緊跟事件名稱。 ErrorLog_Filtering沒問題,並且與system.web/httpModules下的登記名稱相匹配,並且正在由Visual Studio Development Server接收。你只需要確保你匹配所有的名字,它應該在兩種環境中工作。

另請參閱:Programmatically log error and send email

+0

你是對的。非常感謝。我想我做了一些複製/粘貼,並沒有意識到Elmah前綴的存在。 – 2010-10-15 15:45:21