Сколько информации нужно регистрировать из ошибок?[закрыто]

StackOverflow https://stackoverflow.com/questions/411312

  •  03-07-2019
  •  | 
  •  

Вопрос

В компании, в которой я работаю, я создал класс регистрации ошибок для обработки ошибок в моем ASP.net приложении.Это пользовательский класс, потому что нам не разрешается устанавливать дополнительное программное обеспечение на наши серверы (NLog, log4net и т.д.).

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

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

Я подумываю о создании журнала событий на каждой странице или о тех, о которых мне нужна дополнительная информация.Сохраняя его как переменную сеанса на странице и записывая в него события (начало / завершение функций, изменения переменных и т.д.).Тогда, только если вызвана ошибка, нужно отправить ее вместе с сообщением об ошибке, чтобы посмотреть, дает ли это лучшее представление о том, что происходит.Я надеюсь, что выполнение этого таким образом не даст мне тонны журналов событий, когда все пользователи получат доступ к приложению, просто хочу, чтобы это происходило прямо перед тем, как произошла ошибка с одним пользователем.

Знаете ли вы о каких-либо подводных камнях, которых мне следует избегать с помощью метода?

Есть ли у вас какие-нибудь рекомендации, на что обратить внимание?

Обновить:

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

@Джим Близард:Я хотел попытаться уйти от ведения журнала / хранения всего где-нибудь, чтобы вернуться и выяснить, что важно для ситуации, вызвавшей ошибку.Я не хотел перегружаться информацией, о которой говорится в статье, на которую ссылается Роберто Баррос.Мой текущий метод мышления заключается в сохранении строки в памяти на каждой странице, и если обнаруживается ошибка, в событии pages Page_Error возьмите эту строку и присоедините ее к регистрируемому исключению.Таким образом, я регистрирую только возникшие ошибки / исключения и сохраняю журнал событий с этой ошибкой.Если ничего не происходит, тот журнал, который был создан, помещается в корзину битов, и он больше никогда не будет виден.

@Роберто Баррос:Спасибо за эту ссылку, я помню, что где-то читал это, но забыл сохранить.

Это было полезно?

Решение

Возможно, это не тот точный ответ, который вы ищете, но зачем разрабатывать свой собственный механизм регистрации ошибок, когда есть мощные инструменты (о которых вы упомянули), которые решают все эти ключевые проблемы за вас?

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

Другие советы

Когда-то я работал в агентстве, которое не разрешало устанавливать ничего, что не было бы чисто моим собственным кодом или их (ужасными) COM-объектами.Если у вас есть ограничения такого типа, то посмотрите, можете ли вы взять исходный код для log4net и включить в свой проект.

В настоящее время нет ничего лучше log4net, когда дело доходит до ведения журнала.

Я лично использовал следующий подход к регистрации ошибок (и только ошибок журнала) в asp.net приложении:

  • использование protected void Application_Error(object sender, EventArgs e) { Server.Transfer("~/Support/ServerErrorSupport.aspx", true); } (Я делаю Server.Transfer чтобы сохранить все данные публикации.)

  • Сгенерируйте уникальный для этой ошибки идентификатор ошибки (чтобы можно было сгруппировать последующие репорты для одной и той же ошибки).Идентификатор представляет собой хэш, вычисляемый из объединенной строки, состоящей из:файл, метод, lineNr и ошибка.Сообщение.Я получаю значения file, method и lineNr через регулярное выражение в stacktrace.

  • Я записываю все следующие данные в структуру xml (в зависимости от типа данных, я сохраняю значение по-разному, типы значений => toString(), ISerializable => serialize, ...):

    1. Имя машины:Приложение.Сервер.Имя машины
    2. Физический корень:Приложение.Сервер.Путь к карте ("~/")
    3. Запрос:Приложение.Запрос.Url.toString()
    4. Настройки приложений:WebConfigurationManager.Настройки приложений
    5. Настройки соединений:WebConfigurationManager.Строки подключения
    6. Строка запроса:Приложение.Запрос.Строка запроса
    7. ФормПост:Заявка.Запрос.Форма
    8. Сессия:Заявка.Сессия
    9. HttpHeaders:Заявка.Запрос.Заголовки
  • Сохраните xml-структуру в виде локального файла, содержащего идентификатор ошибки и временную метку.Я выбрал этот подход, потому что:

    • Я могу отправить раппорт (xml-файл) себе по почте (во время тестирования / отладки очень просто)
    • храните его локально или в базе данных во время производства
    • поскольку файл представляет собой всего лишь сохранение (дамп в hd), при создании отчета об ошибке может произойти незначительная ошибка (например, подключение к серверу, проблемы с базой данных и т.д.), Просто убедитесь, что у вас есть права на запись.
    • Кроме того, на странице servererrorsupport.aspx после сохранения xml-файла пользователь получает возможность включить дополнительную информацию и добавить адрес электронной почты, чтобы быть в курсе хода устранения ошибки.Это добавляется к XML-документу.
    • Я использую файл xslt для форматирования данных об ошибке (xml) в виде хорошего отчета об ошибке.

Что касается ошибок, то я большой поклонник частого ведения журнала.Когда что-то идет не так, информация очень ценна.Я бы сохранил весь журнал в одном месте (текстовый файл или таблицу базы данных) с идентификатором сеанса, чтобы сгруппировать соответствующие события вместе.

Вот что мне нравится регистрировать:

  • уровень ошибки / отладки (информация, отладка, проблема, сбой и т.д.)
  • время
  • описательный текст (обычно одна строка)
  • трассировка стека (если возможно)
  • данные (пользователь, сеанс, значения переменных и т.д.)

Самый простой способ - записать данные в текстовый файл, но было бы неплохо иметь его в базе данных.Вы также можете использовать журнал событий Windows.Есть кое-что, на что следует обратить внимание.Хм...Вам нужно будет периодически очищать свои журналы.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top