你如何集中ELMAH日志

时间:2011-03-01 23:54:41

标签: elmah exception-logging

在我的作品中,我们制作的网站就像它们已经过时了(即每年很多网站)

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

我正在考虑设置一个中央Google阅读器帐户,并将ELMAH安装的所有RSS源连接到其中。

我担心的是Google表示他们每小时只检查一次,这意味着如果您使用ELMAH的“内存”存储空间,则有可能在应用程序池重新启动时错过错误。

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

你的想法将受到高度赞赏

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

2 个答案:

答案 0 :(得分:7)

通过Elmah源代码中的一些更改,您可以将所有站点写入同一数据库。然后,您可以配置一个mastersite,它显示抛出它的应用程序的所有异常。

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循环中创建了childrows

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

答案 1 :(得分:1)

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

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