在我的作品中,我们制作的网站就像它们已经过时了(即每年很多网站)
我想在所有这些公司实践中安装ELMAH,然后集中记录所有内容以供我们的开发人员查看。这个过程必须非常简单,否则它的使用不会起飞。
我正在考虑设置一个中央Google阅读器帐户,并将ELMAH安装的所有RSS源连接到其中。
我担心的是Google表示他们每小时只检查一次,这意味着如果您使用ELMAH的“内存”存储空间,则有可能在应用程序池重新启动时错过错误。
电子邮件非常好,但是如果每个人都开始收到ELMAH错误消息,他们就会开始忽略它们 - 也许我可以为此设置一个额外的交换邮箱以保持分离?
你的想法将受到高度赞赏
(ps这可能被认为是主观的 - 但我相信有人可能在一些主观答案中有答案,使其成为一个有效的问题)
答案 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 ...)