我不确定我的 ELMAH 设置发生了什么,它工作正常,然后停止工作。我使用 ELMAH 核心和 ELMAH MVC。
即使检查我的源代码控制,webconfig 中也没有真正改变。我还注意到在实际的 ELMAH 错误日志数据库中,记录从大约 11/5 开始停止记录。在源代码管理中找不到与此一致的任何代码更改。
我有两个问题,一个是去的时候myapp/elmah
我得到了错误:
System.Data.SqlClient.SqlException:找不到存储过程“ELMAH_GetErrorsXml”
不知道为什么,因为那个 SPROC 肯定存在于我的数据库中。
并且 web.config 似乎已正确配置为指向该数据库(将在下面发布完整部分)。
第二个问题是当我将应用程序部署到生产环境时,电子邮件通知(可能是日志记录本身)不起作用。在本地主机上工作正常。我收到了电子邮件,但是当部署到生产环境时,什么也没有。
这是我在 web.config 中的 ELMAH 部分:
<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>
<elmah>
<security allowRemoteAccess="yes"/>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="ElmahDb" />
<errorMail from="no-reply@mysite" to="myself@mysite" subject="Mysite Error" smtpPort="0" async="false" />
</elmah>
<connectionStrings>
<add name="ElmahDb" connectionString="Data Source=mydb;Initial Catalog=ErrorLog;Persist Security Info=True;User ID=id;Password=password" providerName="System.Data.SqlClient" />
</connectionStrings>
<appSettings>
<add key="elmah.mvc.disableHandler" value="false" />
<add key="elmah.mvc.disableHandleErrorFilter" value="false" />
<add key="elmah.mvc.requiresAuthentication" value="false" />
<add key="elmah.mvc.allowedRoles" value="*" />
<add key="elmah.mvc.route" value="elmah" />
</appSettings>
<system.web>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
<add name="ErrorMail" type="Elmah.ErrorMailModule, Elmah" />
<add name="ErrorFilter" type="Elmah.ErrorFilterModule, Elmah" />
</httpModules>
</system.web>
<system.net>
<mailSettings>
<smtp deliveryMethod="Network">
<network defaultCredentials="true" host="mySMTP" port="25" />
</smtp>
</mailSettings>
</system.net>
<system.webServer>
<modules>
<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>
</system.webServer>
就是这样,我看到的唯一另一件事是注释掉默认的 HandleErrorAttribute,但那些似乎来自旧文章,ELMAH MVC 无论如何都不需要它,不管我是否尝试过留下它并注释掉它:
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
}
它的功能仍然相同。我也尝试过为 ELMAH 启用/禁用 remoteAccess,但这也无济于事。在 localhost 和生产环境中,我在尝试访问/elmah
. 并且电子邮件仅在本地主机上发送。那么我的配置有什么问题,为什么会出现这些错误?