Когда использовать разные уровни журнала - PullRequest
421 голосов
/ 09 января 2010

Существуют разные способы регистрации сообщений в порядке фатальности:

  1. FATAL

  2. ERROR

  3. WARN

  4. INFO

  5. DEBUG

  6. TRACE

Как мне решить, когда использовать какой?

Какой хороший эвристик использовать?

Ответы [ 16 ]

613 голосов
/ 09 января 2010

Я обычно подписываюсь на следующее соглашение:

  • Трассировка - Только когда я "отслеживаю" код и пытаюсь найти одну часть функции.
  • Отладка - информация, которая диагностически полезна людям больше, чем просто разработчикам (ИТ, системным администраторам и т. Д.).
  • Информация - Обычно полезная информация для регистрации (запуск / остановка службы, предположения о конфигурации и т. Д.). Информация, которую я хочу всегда иметь в наличии, но обычно меня не волнует в обычных обстоятельствах. Это мой стандартный конфигурационный уровень.
  • Предупредить - Все, что потенциально может вызвать странные случаи в приложении, но для которого я автоматически восстанавливаюсь. (Например, переключение с основного на резервный сервер, повторение операции, отсутствие дополнительных данных и т. Д.)
  • Ошибка - Любая ошибка, которая является фатальной для операции , но не для службы или приложения (не удается открыть необходимый файл, отсутствующие данные и т. Д.). Эти ошибки приведут к вмешательству пользователя (администратора или непосредственного пользователя). Обычно они зарезервированы (в моих приложениях) для неправильных строк подключения, отсутствующих служб и т. Д.
  • Неустранимый - Любая ошибка, которая вызывает принудительное завершение работы службы или приложения, чтобы предотвратить потерю данных (или дальнейшую потерю данных). Я оставляю их только для самых отвратительных ошибок и ситуаций, в которых гарантировано повреждение или потеря данных.
279 голосов
/ 09 января 2010

Хотели бы вы, чтобы сообщение вынудило системного администратора встать с постели среди ночи?

  • да -> ошибка
  • нет -> предупредить
117 голосов
/ 11 марта 2011

Мне кажется более полезным думать о серьезности с точки зрения просмотра файла журнала.

Неустранимый / Критический : Общий сбой приложения или системы, который следует немедленно расследовать. Да, разбуди Сисадмина. Так как мы предпочитаем, чтобы наши SysAdmins были предупреждены и хорошо отдохнули, эту серьезность следует использовать очень редко. Если это происходит ежедневно, и это не BFD, значит, оно потеряно. Как правило, неустранимая ошибка возникает только один раз за время существования процесса, поэтому, если файл журнала связан с процессом, это, как правило, последнее сообщение в журнале.

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

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

Информация : Это важная информация, которая должна регистрироваться при нормальных условиях, таких как успешная инициализация, запуск и остановка служб или успешное завершение значительных транзакций. Просмотр журнала с информацией и выше должен дать краткий обзор основных изменений состояния в процессе, предоставляя контекст верхнего уровня для понимания любых предупреждений или ошибок, которые также происходят. Не иметь слишком много информационных сообщений. Обычно у нас есть <5% информационных сообщений относительно трассировки. </p>

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

Отладка : Мы считаем, что Отладка <Трассировка. Различие заключается в том, что сообщения отладки компилируются из сборок Release. Тем не менее, мы не рекомендуем использовать сообщения отладки. Разрешение сообщений отладки приводит к добавлению все большего количества сообщений отладки, и ни одно из них никогда не удаляется. Со временем это делает файлы журналов практически бесполезными, потому что слишком сложно фильтровать сигнал от шума. Это приводит к тому, что разработчики не используют журналы, которые продолжают спираль смерти. Напротив, постоянное сокращение сообщений трассировки побуждает разработчиков использовать их, что приводит к добродетельной спирали. Кроме того, это исключает возможность появления ошибок из-за необходимых побочных эффектов в отладочном коде, который не включен в сборку релиза. Да, я знаю, что это не должно происходить в хорошем коде, но лучше, потом извините. </p>

23 голосов
/ 15 апреля 2016

Вот список того, что есть у «регистраторов».


Apache log4j: & 1; 1006 *, & 2; 1010 *

  1. FATAL

    [ v1.2 : ..] очень серьезные события ошибок, которые, вероятно, приведут к прекращению работы приложения.

    [ v2.0 : ..] серьезная ошибка, препятствующая продолжению работы приложения.

  2. ERROR

    [ v1.2 : ..] события ошибок, которые могут все еще позволить приложению продолжить работу.

    [ v2.0 : ..] ошибка в приложении, возможно исправимая.

  3. WARN

    [ v1.2 : ..] потенциально опасные ситуации.

    [ v2.0 : ..] событие, которое могло бы [ sic ] привести к ошибке.

  4. INFO

    [ v1.2 : ..] информационных сообщений, которые освещают прогресс приложения на крупном уровне.

    [ v2.0 : ..] событие в ознакомительных целях.

  5. DEBUG

    [ v1.2 : ..] подробные информационные события, которые наиболее полезны для отладки приложения.

    [ v2.0 : ..] общее событие отладки.

  6. TRACE

    [ v1.2 : ..] более мелкие информационные события, чем DEBUG.

    [ v2.0 : ..] детальное отладочное сообщение, обычно фиксирующее поток через приложение.


Apache Httpd (как обычно) любит идти за перебор: & sect;

  1. АВАРИЙНАЯ

    Чрезвычайные ситуации & ndash; система непригодна для использования.

  2. предупреждение

    Действие должно быть предпринято немедленно [но система все еще может использоваться].

  3. крит :

    Критические условия [но действия не должны предприниматься немедленно].

    • " socket: не удалось получить сокет, выход из дочернего элемента "
  4. ошибка

    Условия ошибки [но не критично].

    • " Преждевременный конец заголовков скриптов "
  5. предупредить :

    Условия предупреждения. [близко к ошибке, но не к ошибке]

  6. извещение

    Нормальное, но значительное [ заметное ] состояние.

    • " httpd: пойман SIGBUS, пытается сбросить ядро ​​в ... "
  7. информация :

    Информационный [и неизвестный].

    • [" Сервер работает в течение x часов. "]
  8. отлаживать

    Сообщения уровня отладки [, то есть сообщения, зарегистрированные для удаления ошибок )].

    • " Открытие файла конфигурации ... "
  9. trace1 & rarr; trace6

    Сообщения трассировки [, то есть сообщения, зарегистрированные для трассировки ].

    • " прокси: FTP: управляющее соединение завершено "
    • " прокси: CONNECT: отправка запроса CONNECT на удаленный прокси "
    • " openssl: Рукопожатие: начало "
    • " чтение из буферизованной бригады SSL, режим 0, 17 байт "
    • " поиск карт СБОЙ: map=rewritemap key=keyname"
    • " Сбой поиска в кэше, форсированный поиск новой карты "
  10. trace7 & rarr; trace8

    Трассировка сообщений, вывод больших объемов данных

    • "| 0000: 02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |"
    • "| 0000: 02 23 44 30 13 40 ac 34 df 3d bf 9a 19 49 39 15 |"

Регистрация в Apache: & sect;

  1. фатальным

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

  2. ошибка

    Другие ошибки во время выполнения или непредвиденные условия. Ожидайте, что они будут немедленно видны на консоли состояния.

  3. предупредить :

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

  4. информация

    Интересные события времени выполнения (запуск / выключение). Ожидайте, что они будут немедленно видны на консоли, поэтому будьте консервативны и соблюдайте минимум.

  5. отлаживать

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

  6. след

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

В «лучших методах» использования Apache для общего использования различаются debug и info в зависимости от того, какие границы они пересекают.

Границы включают в себя:

  • Внешние границы - ожидаемые исключения.

  • Внешние границы - неожиданные исключения.

  • Внутренние границы.

  • Значимые внутренние границы.

(Подробнее об этом см. руководство по регистрации общего доступа .)

23 голосов
/ 09 января 2010

Если вы можете решить проблему, то это предупреждение. Если это мешает продолжить выполнение, то это ошибка.

22 голосов
/ 08 января 2013

Я бы рекомендовал принять уровни серьезности Syslog: DEBUG, INFO, NOTICE, WARNING, ERROR, CRITICAL, ALERT, EMERGENCY.
Смотри http://en.wikipedia.org/wiki/Syslog#Severity_levels

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

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

16 голосов
/ 09 января 2010

Предупреждения вы можете восстановить. Ошибки вы не можете. Это моя эвристика, у других могут быть другие идеи.

Например, допустим, вы вводите / импортируете имя "Angela Müller" в свое приложение (обратите внимание на умлаут над u). Ваш код / ​​база данных может быть только на английском языке (хотя, вероятно, не должен быть в наше время) и поэтому может предупредить, что все "необычные" символы были преобразованы в обычные английские символы.

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

5 голосов
/ 09 января 2010

Как уже говорили другие, ошибки - это проблемы; предупреждения - потенциальные проблемы.

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

Но да, все сводится к аспектам восстановления и актуальности. Если вы можете восстановить, это, вероятно, предупреждение; если что-то действительно приводит к сбою, это ошибка.

4 голосов
/ 18 июня 2014

Я думаю, что уровни SYSLOG NOTICE и ALERT / EMERGENCY в значительной степени излишни для ведения журнала на уровне приложения - в то время как CRITICAL / ALERT / EMERGENCY могут быть полезными уровнями предупреждений для оператора, который может инициировать различные действия и уведомления, для администратора приложения это все так же, как FATAL. И я просто не могу достаточно различить, когда мне дают уведомление или какую-то информацию. Если информация не заслуживает внимания, это не совсем информация:)

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

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

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

3 голосов
/ 11 апреля 2017

С Ietf - Страница 10

Each message Priority also has a decimal Severity level indicator.

Они описаны в следующей таблице вместе с их числовыми значениями. ценности. Значения серьезности ДОЛЖНЫ быть в диапазоне от 0 до 7 включительно.

       Numerical         Severity
         Code

          0       Emergency: system is unusable
          1       Alert: action must be taken immediately
          2       Critical: critical conditions
          3       Error: error conditions
          4       Warning: warning conditions
          5       Notice: normal but significant condition
          6       Informational: informational messages
          7       Debug: debug-level messages
...