Как вы централизуете журналы ELMAH

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

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

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

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

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

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

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


person Doug    schedule 01.03.2011    source источник


Ответы (2)


Внеся несколько изменений в исходный код Elmah, вы можете сделать так, чтобы все ваши сайты записывались в одну и ту же базу данных. Затем вы можете настроить один мастер-сайт, который отображает все исключения с приложением, которое его вызвало.

Эрик Кинг показывает, как это сделать, в своем блоге http://blog.devadept.com/2010/02/using-elmah-with-multiple-applications.html

Обобщить:

Создайте в базе данных две дополнительные хранимые процедуры с именами ELMAH_GetErrorsXML_Master и ELMAH_GetErrorXML_Master без параметра applicationname.

Затем создайте класс 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"/>
person Freek Buurman    schedule 10.03.2011
comment
Это здорово, но мы хотим быть отключенными - у нас нет всех наших сайтов на одном и том же веб-хостинге, и поэтому мы не можем записывать все в одну базу данных, поскольку она не может быть центральной - отсюда и моя идея с читателем Google - person Doug; 11.03.2011
comment
В этом случае я бы создал класс на основе XmlFileErrorLog, который принимает информацию о ftp. Вы можете отправить все XML-файлы на один сервер в вашей локальной сети и использовать те же изменения рендеринга, которые я опубликовал выше. - person Freek Buurman; 11.03.2011

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

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

person ihsinhw    schedule 30.08.2017