2011-12-15 5 views
1

私はこれを理解できません。 Elmahはコントローラ内で発生する例外を記録していません。例えば、何の電子メールは、このために生成されません:ElmahはMVC3の例外を電子メールで送信しませんが、ページエラー、404などを電子メールで送信します

[Authorize] 
    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Reply(ReplyViewModel viewModel) 
    { 

     throw new Exception("Test"); 
    .... 
    } 

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" /> 
    </sectionGroup> 
    </configSections> 


    <elmah> 
    <!--<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah-sql" > 
    </errorLog>--> 
    <errorMail from="[email protected]" 
     to="[email protected]" 
     subject="Error Subject Line" 
     async="true" 
     smtpPort="25" 
     smtpServer="ourstmpserver"> 
    </errorMail> 
    </elmah> 
    <system.web> 
    <compilation debug="true" targetFramework="4.0"> 
     <assemblies> 
     <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Helpers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
     </assemblies> 
    </compilation> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/LogOn" timeout="2880" /> 
    </authentication> 
    <membership> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" /> 
     </providers> 
    </membership> 
    <profile> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
     </providers> 
    </profile> 
    <roleManager enabled="false"> 
     <providers> 
     <clear /> 
     <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
     <add name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" applicationName="/" /> 
     </providers> 
    </roleManager> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    <httpModules> 
     <!--<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />--> 
     <add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" /> 
     <add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" /> 
    </httpModules> 
    <httpHandlers> 
     <add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" /> 
    </httpHandlers> 
    </system.web> 
    <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> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="3.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
</configuration> 

しかし、私は何のコントローラ/アクションを持っていないいるURLに移動した場合、私は意志エルマから電子メールを受け取る。

何がありますか?例外が発生したときに電子メールが本当に必要です...

+0

elmahはエラーをログに記録しますか?つまり、あなたが返信アクションに行き、ysodなどを見た場合、/elmah.axdハンドラーURLのログに例外が表示されますか? – danludwig

+0

customErrorsモードをオフに設定しようとしましたか?私は最近、同じ問題を発見したし、私がそれを切り替えたときElmahにエラーが表示され始めた – torm

+0

カスタムエラーはオフです。まだ何も。 –

答えて

0

NuGetで利用可能なElmah.Contrib.Mvcを試してみてください。

私たちは、このパッケージを使用し、そのように、私たちのGlobal.asaxの中で自分のHandleErrorAttributeを登録します。私は、右推測する場合

private static void RegisterGlobalFilters(GlobalFilterCollection filters) 
{ 
    //filters.Add(new HandleErrorAttribute()); // default MVC setting 
    filters.Add(new ElmahHandleErrorAttribute()); // from Elmah.Contrib.Mvc 
} 
+0

それを試してみてください。まだダイスはありません。 –

0

わからないが、私は同じ問題を持っています。私はこれをGoogleで検索しました:

http://groups.google.com/group/elmah/browse_thread/thread/b1d95620a5baee0a

はまだそれを試していないが、それは、私は正確に同じ問題を抱えていた、そして最終的にはデバッグのためのソースを使用して、それを解決する便利な

+0

私はcustomErrorsをオフにしています - 何も起こっていません。私は本当に困惑しています。まるでエルマが何もしないように見えるだけです。存在しないページに移動しようとしない限り、最後に何かが記録されます。しかし、私は本当にそのようなエラーについては理解していません。私は、ログと電子メールを送信するために私のアプリで例外が必要です。 –

0

に来ることがあります。私の場合Download Source

ELMAHはCurrentPrincipal.Identity.Nameを使用しているので、Thread.CurrentPrincipalは、例外を引き起こした、Identity = nullCurrentPrincipal置き換えました。

Elmah自体の内部のすべての例外は、ログ例外の結果としてプログラムがクラッシュしないようにキャッチされます。この場合、元の例外も失われます。

これは私のケースで何が問題になったかの単なる例であり、Elmah自体に起因する例外はこの動作になります。したがって、デバッグにはソースを使用する必要があります。 ElmahはTraceにキャッチした例外を書いているので、Traceを見ることもできます。

関連する問題