4

在我的作品中,我们制作的网站就像过时一样(即每年有很多网站)

我想在所有这些上安装 ELMAH 作为公司实践,然后集中记录所有内容以供我们的开发人员查看。该过程必须非常简单,否则它的使用将无法起飞。

我正在考虑建立一个中央 Google 阅读器帐户并将 ELMAH 安装的所有 RSS 提要连接到其中。

我担心的是,谷歌说他们每小时只检查一次,这意味着如果你使用 ELMAH 的“内存”存储,当应用程序池重新启动时,错误可能会被遗漏。

电子邮件非常好,但是如果每个人都开始收到 ELMAH 错误消息,他们就会开始忽略它们——也许我可以为此设置一个额外的交换邮箱来保持独立?

您的想法将不胜感激

(ps这可能被认为是主观的 - 但我相信有人可能在许多主观答案中都有答案,使其成为一个有效的问题)

4

2 回答 2

7

通过对 Elmah 源代码进行一些更改,您可以让所有站点写入同一个数据库。然后,您可以配置一个主站点来显示所有异常以及引发异常的应用程序。

Eric King 在这篇博文中展示了如何http://blog.devadept.com/2010/02/using-elmah-with-multiple-applications.html

总结一下:

在数据库中创建另外两个名为 ELMAH_GetErrorsXML_Master 和 ELMAH_GetErrorXML_Master 的存储过程,不带 applicationname 参数。

然后基于现有的“SQLErrorLog.cs”类创建一个 SQLMasterErrorLog 类。在此编辑中,GetErrorXml() 和 GetErrorsXML() 方法调用新的存储过程

public static SqlCommand GetErrorXml(string appName, Guid id)
{
    SqlCommand command = new SqlCommand("ELMAH_GetErrorXml_Master");
    command.CommandType = CommandType.StoredProcedure;

    SqlParameterCollection parameters = command.Parameters;
    parameters.Add("@ErrorId", SqlDbType.UniqueIdentifier).Value = id;

    return command;
}

public static SqlCommand GetErrorsXml(string appName, int pageIndex, int pageSize)
{
    SqlCommand command = new SqlCommand("ELMAH_GetErrorsXml_Master");
    command.CommandType = CommandType.StoredProcedure;

    SqlParameterCollection parameters = command.Parameters;

    parameters.Add("@PageIndex", SqlDbType.Int).Value = pageIndex;
    parameters.Add("@PageSize", SqlDbType.Int).Value = pageSize;
    parameters.Add("@TotalCount", SqlDbType.Int).Direction = ParameterDirection.Output;

    return command;
}

更改 ErrorLogPage 类中的 RendorErrors() 方法以在日志查看器表中显示应用程序名称的额外列。

将以下内容添加到表头

headRow.Cells.Add(FormatCell(new TableHeaderCell(), "Host", "host-col"));
headRow.Cells.Add(FormatCell(new TableHeaderCell(), "App", "app-col"));

以及创建子行的 for 循环中的以下内容

bodyRow.Cells.Add(FormatCell(new TableCell(), error.HostName, "host-col"));
bodyRow.Cells.Add(FormatCell(new TableCell(), error.ApplicationName, "app-col"));

现在您只需要一个配置了 elmah 的空网站。而不是正常的 SqlErrorLog 使用以下

<errorLog type="Elmah.SqlMasterErrorLog, Elmah" connectionStringName="elmah"/>
于 2011-03-10T14:28:48.643 回答
1

我使用 ftp 方法将所有错误 XML(站点 a、b、c ...)传输到收集所有站点错误 XML(日志站点)。

在每 10 分钟Global.asax Application_Start添加ElmahErrorLogCustomize任务以将所有 XML 传输到日志站点,在将所有 XML 传输到站点 (a,b,c ...) 并删除这些登录站点 (a,b,c ...)

于 2017-08-30T09:29:12.330 回答