Asp.net ELMAH未在ELMAH.axd中显示来自SQL Server的所有错误日志

Asp.net ELMAH未在ELMAH.axd中显示来自SQL Server的所有错误日志,asp.net,sql-server,elmah,Asp.net,Sql Server,Elmah,我将Elmah设置为将错误记录到SQL Server,web应用程序正在将所有错误记录到数据库中,但并非所有错误都显示在Elmah.axd中 缺少的一些错误包括: System.Web.HttpUnhandledException _shutDownMessage=主机环境启动关机主机环境导致关机\u shutDownStack= 在System.Environment.GetStackTrace(异常e,布尔needFileInfo) 在System.Environment.get_Stac

我将Elmah设置为将错误记录到SQL Server,web应用程序正在将所有错误记录到数据库中,但并非所有错误都显示在
Elmah.axd

缺少的一些错误包括:

  • System.Web.HttpUnhandledException

    _shutDownMessage=主机环境启动关机主机环境导致关机\u shutDownStack=
    在System.Environment.GetStackTrace(异常e,布尔needFileInfo)
    在System.Environment.get_StackTrace()
    在System.Web.Hosting.HostingEnvironment.InitiateShareDownInternal()中

  • System.Web.HttpException

    会话状态在此上下文中不可用

  • _shutDownMessage=IIS配置更改主机环境启动关机主机环境导致关机配置更改\u shutDownStack=
    在System.Environment.GetStackTrace(异常e,布尔needFileInfo)
    在System.Environment.get_StackTrace()

请参阅附加的屏幕截图

如何使数据库中的所有错误显示在
elmah.axd

当我在文件系统中保存错误时,一切都很好,但当我移动到SQL Server时就不行了

谢谢


我认为这是因为您有不同的应用程序名称(请参见屏幕截图中的
应用程序
列),而
SqlErrorLog
将只显示属于您在
web.config
中配置的应用程序名称的错误(如果没有,ELMAH将默认为IIS分配的标识符,如
/LM/W3SVC/10/ROOT
)。这是经过设计的,因为它允许您为多个web应用程序使用一个后端数据库。始终最好配置一个稳定且逻辑合理的应用程序名称。如果所有这些错误都是针对同一应用程序的,则可以在表上运行
UPDATE
语句,将
应用程序
列设置为相同的值。

如果我是ay谦虚地以首席架构师Atif所说的为基础,在您的Web.config中,这一部分:

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

将其设置为:

<elmah>
  <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="foo" applicationName="*" />
</elmah>

这将显示所有数据库错误记录,而不仅仅是与Elmah正在运行的应用程序名匹配的记录。如果未提供applicationName属性,它将只返回与IIS分配的标识符匹配的记录,例如-“/LM/W3SVC/10/ROOT”

如果您有一个纯粹用于查看环境中所有应用程序中记录的Elmah错误的应用程序,这将非常有用


我使用了sqlErrorLog,只是为sqlErrorLog设置了ApplicationName: 代码:

结果图像:

看起来您可能正在运行底部屏幕截图上的内存或文件错误记录器。请尝试单击elmah.axd上列表中的一个错误,复制错误id并在SQL Server中搜索错误id。是否存在?我正在获取XXX上*的
错误日志
未找到错误。
。该星未被识别为wildcard,在web.config中有这样的设置吗?啊,看起来我可能没有提供对Elmah存储过程[Elmah_GetErrorsXml]和[Elmah_GetErrorXml]的关键更改。在这些存储过程中,请尝试将:
[Application]=@Application
的WHERE子句中的所有实例更改为:
(@Application='*'或([Application]=@Application))
。这样,使用
applicationName=“*”
作为其Elmah应用程序名称的应用程序将返回所有记录,而所有其他应用程序仍将返回特定于其
applicationName=“MyAppName”的记录
。如果有帮助,请告诉我。感谢您的澄清。我不想触碰Elmah的代码,所以我选择使用相同的
applicationName
var connectionString = ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
var sqlErrorLog = new Elmah.SqlErrorLog(connectionString);

var controller = executedContext.Controller as Controller;
if (controller != null)
    sqlErrorLog.ApplicationName = controller.Request.ServerVariables["APPL_MD_PATH"];
var errorId = sqlErrorLog.Log(error);