Какую информацию я должен регистрировать в моем веб-приложении? - PullRequest
7 голосов
/ 09 июня 2009

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

Требуются конкретные рекомендации и рекомендации.

Спасибо

Последующее наблюдение

Если я регистрирую исключения, какую конкретно информацию я должен регистрировать? Должен ли я делать что-то большее, чем _log.Error(ex.Message, ex);?

Ответы [ 7 ]

7 голосов
/ 09 июня 2009

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

Регистрация исключений

Когда все остальное не удалось, это не должно. Это хорошая идея, чтобы иметь центральное средство захвата всех неупорядоченных исключений. Это не должно будет намного сложнее, чем завершение всего приложения в гигантской попытке / улове, если только вы не используете больше, чем в потоке. Работа на этом не заканчивается хотя, потому что, если вы подождете, пока исключение достигнет вас, много полезной информации вышло бы за рамки. По крайней мере, вы должны попытайтесь собрать определенные части состояния приложения, которые могут помочь с отладкой при разматывании стека. Ваше приложение всегда должно быть готово к созданию такого типа выходных данных журнала, особенно на производстве. Не забудьте взглянуть на ELMAH , если вы еще этого не сделали. Я не пробовал, но я слышал замечательные вещи

Регистрация приложений

То, что я называю журналами приложений, включает в себя любой журнал, в котором содержится информация о том, что ваше приложение делает на концептуальном уровне, например «Удаленный заказ» или «Пользователь вошел в систему». Этот вид информации может быть полезен для анализа тенденций, аудита системы, ее блокировки, тестирования, безопасности и выявления грубых ошибок. Вероятно, было бы неплохо планировать оставить эти журналы также в рабочем состоянии, возможно, с различными уровнями детализации.

Регистрация трассировки

Регистрация трассировки, для меня, представляет собой наиболее детализированную форму регистрации. На этом уровне вы концентрируетесь не столько на том, что делает приложение, а на том, как оно это делает. Это на один шаг выше, фактически проходя код за строкой. Вероятно, это наиболее полезно при решении проблем параллелизма или чего-либо такого, что трудно воспроизвести. Вы не хотели бы всегда запускать это, вероятно, только включая его, когда это необходимо.

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

3 голосов
/ 09 июня 2009

Некоторые вещи для входа:

  • бизнес-действия, такие как добавление / удаление элементов. Поговорите с владельцем бизнеса вашего приложения, чтобы придумать список полезных вещей. Это должно иметь смысл для бизнеса, а не для вас (например: когда пользователь отправляет отчет, когда пользователь создает новый процесс и т. Д.)
  • Исключения
  • Исключения
  • 1010 * Исключения *

Некоторые вещи, которые НЕ нужно регистрировать:

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

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

2 голосов
/ 09 июня 2009

Мои несколько центов. Помимо правильного использования серьезности журнала и исключений, рассмотрите возможность структурирования операторов журнала, чтобы вы могли легко просматривать данные журнала в будущем. Например - быстрое извлечение значимой информации, выполнение запросов и т. Д. Нет проблем с созданием множества данных журнала, проблема заключается в том, чтобы преобразовать эти данные в информацию. Таким образом, структурирование и определение этого заранее помогает в дальнейшем использовании. Если вы используете log4j, я бы также предложил использовать отображенный диагностический контекст (MDC) - это очень помогает для отслеживания контекстов сеанса. Помимо трассировки и информации, я бы также использовал уровень отладки, где я обычно держу темп. Предметы. Они могут быть отфильтрованы или отключены, когда не нужны.

2 голосов
/ 09 июня 2009

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

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

Вам также следует рассмотреть возможность отключения при необходимости.

Надеюсь, это поможет.

2 голосов
/ 09 июня 2009

Это зависит от приложения и его аудитории. Если вы управляете продажами или торгуете акциями, вам, вероятно, следует зарегистрировать больше информации, чем в личном блоге. Когда вам больше всего нужен журнал, это когда в вашей производственной среде происходит ошибка, но вы не можете воспроизвести ее локально. Наличие уровня журнала и иерархии журнала поможет в таких ситуациях, потому что вы можете динамически увеличивать уровень журнала. См. log4j документацию и log4net .

1 голос
/ 09 июня 2009

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

...