С некоторыми изменениями в исходном коде Elmah вы можете записывать все свои сайты в одну и ту же базу данных. Затем вы можете настроить один мастер-сайт, который отображает все исключения, с приложением, которое его выдало.
Эрик Кинг показывает, как в этом сообщении в блоге http://blog.devadept.com/2010/02/using-elmah-with-multiple-applications.html
Подведем итог:
Создайте две дополнительные хранимые процедуры в базе данных с именами ELMAH_GetErrorsXML_Master и ELMAH_GetErrorXML_Master без параметра имени приложения.
Затем создайте класс SQLMasterErrorLog на основе существующего класса SQLErrorLog.cs. В этом редактируйте методы 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;
}
Измените метод RendorErrors () в классе ErrorLogPage, чтобы отображать дополнительный столбец в таблице средства просмотра журнала для имени приложения.
Добавить следующее в заголовок таблицы
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"/>