Как вы централизует журналы ELMAH - PullRequest
4 голосов
/ 02 марта 2011

На моих работах мы создаем веб-сайты, как будто они выходят из моды (то есть много сайтов в год)

Я хочу установить ELMAH на все это в качестве практики компании, а затем регистрировать все централизованно для просмотранашими разработчиками.Процесс должен быть действительно легким, иначе его использование не пойдет на пользу.

Я думал о создании центральной учетной записи Google Reader и подключении к ней всех каналов RSS для установок ELMAH.

меня беспокоит то, что Google говорит, что они проверяют только один раз в час, и это означает, что если вы используете хранилище «в памяти» для ELMAH, есть вероятность, что ошибки будут пропущены при перезапуске пула приложений.

Электронная почта довольно хорошая, но если все начнут получать сообщения об ошибках ELMAH, они начнут их игнорировать - может быть, я мог бы настроить дополнительный почтовый ящик для обмена ПРОСТО для этого, чтобы держать вещи отдельно?

вашмысли будут высоко оценены

(ps это МОЖЕТ считаться субъективным - но я полагаю, что кто-то, вероятно, имеет ответ из числа субъективных ответов, что делает его правильным вопросом)

Ответы [ 2 ]

7 голосов
/ 10 марта 2011

С некоторыми изменениями в исходном коде 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"/>
1 голос
/ 30 августа 2017

Я использую метод ftp, чтобы передать все ошибки XML (сайт a, b, c ...) в XML-файл сбора всех ошибок сайта (журнал сайта).

in Global.asax Application_Start add ElmahErrorLogCustomize Задача каждые 10 минут для передачи всего XML на сайт журнала, после передачи всего XML на сайте (a, b, c ...) и удаления этих журналов на сайте (a, b, c ...)

...