Ведение журнала: почему и что? [закрыто]

39

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

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

Уинстон Эверт
источник

Ответы:

24

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

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

Джефф
источник
19

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

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

Другое использование ведения журнала, которое может быть не полезно для всех программ, - это анализ статистики. Например, ваш веб-сервер, как правило, регистрирует каждый поступающий запрос, а затем существует множество инструментов, которые могут анализировать эти журналы и создавать графики вашего самого загруженного времени, самых популярных страниц и так далее. Вы можете использовать эти данные для планирования емкости («мне нужен больший сервер?») И так далее.

Дин Хардинг
источник
9

Регистрация ведется по двум причинам:

  1. диагностика
  2. аудит

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

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

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

MIA
источник
Это похоже на разницу между ведением дневника и хранением копий ваших договоров аренды.
Шухало
8

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

Но один парень из Google однажды сказал мне, что их серверные процессы не ведут журналирование; вместо этого они «оснащены»; это означает, что у каждого процесса есть хуки или порты (он не указал механику), где другие процессы могут блокироваться, чтобы запрашивать параметры и статистику. Это те процессы мониторинга, которые хранят много вещей в журналах, преимущество в том, что информация, которую они получают, не «открывает файл», «пишет это», «выбирает это»; они получают такие вещи, как «45 453 открытых файла», «653 клиента службы X», «средний ответ 344 мс на запрос Y»

Конечно, это другой подход, о котором я склонен помнить, присматривая за моими системами, даже если они на несколько порядков меньше.

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

Я пришел из приложения Winforms N-Tiered, которое регистрировало все.

Это было не очень полезно.

Конечно, регистрация исключений - это здорово; но зачем регистрировать их на компьютере клиента, когда вы можете просто отправить исключение по электронной почте команде разработчиков?

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

Джордж Стокер
источник
1
Можете ли вы по-прежнему отправлять им электронные письма, если ваше приложение не работает?
Пемдас
2
Что делать, если электронная почта не работает?
3
что если на машине, на которой он работает, нет подключения к интернету?
Пемдас
2
Я не верю в это, поэтому я доставляю вам неприятности. Вы в основном сказали, что все журналы должны быть отправлены по электронной почте команде разработчиков, что часто невозможно.
Пемдас
3
@Pemdas Все просто: там, где вы можете это сделать, предпочтительнее просто волей-неволей регистрировать все и никому не отправлять. Журналы только что-то значат, если кто-то регулярно их проверяет, и только если они регистрируют достаточно, чтобы быть полезными. Слишком часто я вижу, как разработчики регистрируют все, и даже не смотрят на это. Стыдно, правда.
Джордж Стокер
4

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

Ведение журнала ограничено только сбором информации об ошибках?

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

Сначала я понятия не имел, насколько это будет значительным. но, видимо, это очень полезно во многих вещах (кроме отладки):

  • понимание поведения пользователя
  • оценка принятия новой функции
  • различать ранних, мошенников или потенциальных клиентов

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

Анвар Чандра
источник
2

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

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

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

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

aslisabanci
источник
2

Регистрация полезна для информации, которую вы не можете получить другими программами:

  • Захватить следы стека (у вас есть тот)
  • Захватите, какие данные обрабатывались при сбое вашего приложения. Помните, что отладчики помогают, только если они присутствуют, когда происходит сбой.
  • Профилирование информации. Если вы не можете запустить профилировщик в производственной среде, подробное ведение журналов, включая временные метки, может помочь вам определить, куда ушло время. Даже неспособность определить, может помочь вам определить, что это за пределами вашей программы (например, запуск сборки мусора).
  • Статистика не ожидается при написании программы. Меня попросили предоставить графики поведения с течением времени для интервалов, интересных по другим причинам. Необходимые данные могут быть извлечены из файлов журнала с помощью небольшого количества уловок grep + awk + perl ninja.

Примечание: вы хотите по крайней мере два файла журнала.

  • Один на уровне DEBUG - предоставляет всю информацию, которую вы можете себе представить (включая INFO и выше). Если это слишком много, подумайте о дополнительном уровне TRACE.
  • Один на уровне INFO - обеспечивает обзор системы на 10000 метров. Важные вехи идут сюда.

ИНФО один всегда включен. Отладка включается при необходимости.

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

Для дополнительной милости, пусть все вызовы функций добавляют свои параметры к любой трассировке стека, в Java с

public void sendEmail(String sender, String recipient) {
try { 
...
} catch (Exception e) {
  throw new RuntimeException("sendEmail(sender="+sender+", recipient="+recipient+")");
}

Этот подход существенно расширяет ваш стек вызовов значениями параметров и может позволить вам анализировать ситуацию только с помощью трассировки стека и не видеть файлы журнала.


источник
+1 за «Напишите код регистрации, ожидая, что однажды вам придется отладить ситуацию, когда ВСЕ, что у вас есть, - это файл журнала, и правильное выполнение может быть разницей между увольнением и повышением в должности».
Марси
1

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

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

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

ocodo
источник
1

Это, безусловно, зависит от типа системы, которую вы строите.

Если вы пишете отдельное настольное приложение, такое как текстовый процессор, то вам, вероятно, не нужна регистрация.

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

Дима
источник
1

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

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

Еще один момент с точки зрения администратора: подумайте о ротации журналов.

Кристиан
источник