你如何集中ELMAH日志

Dou*_*oug 4 elmah exception-logging

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

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

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

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

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

你的想法将不胜感激

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

Fre*_*man 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;
}
Run Code Online (Sandbox Code Playgroud)

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

将以下内容添加到表标题中

headRow.Cells.Add(FormatCell(new TableHeaderCell(), "Host", "host-col"));
headRow.Cells.Add(FormatCell(new TableHeaderCell(), "App", "app-col"));
Run Code Online (Sandbox Code Playgroud)

以及for循环中的以下内容创建了childrows

bodyRow.Cells.Add(FormatCell(new TableCell(), error.HostName, "host-col"));
bodyRow.Cells.Add(FormatCell(new TableCell(), error.ApplicationName, "app-col"));
Run Code Online (Sandbox Code Playgroud)

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

<errorLog type="Elmah.SqlMasterErrorLog, Elmah" connectionStringName="elmah"/>
Run Code Online (Sandbox Code Playgroud)

  • 在这种情况下,我将基于接受ftp信息的XmlFileErrorLog创建一个类.您可以将所有xml文件发送到本地网络中的单个服务器,并使用上面发布的相同呈现更改. (2认同)