Должен ли я регистрироваться или нет?

#language-agnostic #logging

#не зависит от языка #ведение журнала

Вопрос:

Я уверен, что у многих из вас был этот спор: что записывать или нет в файл журнала приложения.

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

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

у нас есть объект Dao, каждый метод в котором обертывает запрос select.

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

как насчет регистрации ошибки stacktrace? Я нахожу это очень беспорядочным и перегружающим файл журнала.

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

Спасибо,

луч.

Комментарии:

1. Я удалил теги C # и Java, поскольку ваш вопрос в значительной степени не зависит от языка.

2. «как насчет регистрации ошибки stacktrace? Я нахожу это очень беспорядочным и перегружающим файл журнала » — Разве это не именно те вещи, которые вы хотите определить и исправить?

3. Вы можете создать более одного файла журнала. У меня более 20 😉 Один для ошибок и общего выполнения, у вас может быть один для запросов и результатов и т.д.

4. Если вам не нравятся ошибки в ваших журналах, я предлагаю вам исправить код, чтобы вы не получали ошибок в своих журналах. 😉

5. Дело не в наличии ошибок в моих журналах.. речь идет о том, что должно быть и чего не должно быть в моих журналах, за исключением ошибок! Я видел, что иногда программисты записывают весь поток в журнал (debug), и из-за накладных расходов журналы очень затрудняют понимание.

Ответ №1:

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

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

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

Комментарии:

1. Я видел методологию, когда программисты отлаживают каждый вход и выход метода. Что вы об этом думаете?

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

3. Это называется инструментирование и может быть очень полезно для отладки многих проблем, когда простое пошаговое выполнение кода изменило бы тайминги и, следовательно, поведение (потоки) или было бы слишком громоздким или отнимающим много времени. Последнее особенно актуально в коде фреймворка, который будет попадаться очень часто, но в основном для случаев, не связанных с проблемой. Когда инструментарий регистрирует отступы при каждом «входе» и отступы при каждом выходе, проблемы с порядком вызовов, конфликтом потоков и сложной нежелательной рекурсией становятся намного более заметными.

Ответ №2:

не регистрируйте больше, чем необходимо.

более подробное объяснение здесь http://www.codinghorror.com/blog/2008/12/the-problem-with-logging.html

приветствия

Ответ №3:

вот почему у вас разные уровни регистрации. чисто информационный материал, который вы регистрируете в LOG_INFO, и материал для отладки, который вы регистрируете в LOG_DEBUG. то, что на самом деле регистрируется, зависит от пользователя.