Когда использовать разные уровни журнала

Есть разные способы записывать сообщения в журнал в порядке смертельного исхода:

  1. FATAL

  2. ERROR

  3. WARN

  4. INFO

  5. DEBUG

  6. TRACE

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

Какую эвристику использовать?


person raoulsson    schedule 08.01.2010    source источник
comment
Довольно широкий вопрос. Таким образом, возможно более одного ответа, в зависимости от фактических обстоятельств регистрации. Кому-то будет не хватать notice в этой подборке, кому-то не будет ...   -  person Wolf    schedule 04.10.2017
comment
@Wolf, где «заметка» попадает под эту иерархию? Только для записи...   -  person pgblu    schedule 20.07.2018
comment
notice вполне может отсутствовать, потому что некоторые популярные службы ведения журналов, такие как log4j, не используют его.   -  person pgblu    schedule 20.07.2018
comment
notice находится между warning и info. datatracker.ietf.org/doc/html/rfc5424#page-11   -  person datashaman    schedule 17.06.2021


Ответы (20)


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

  • Трассировка - только тогда, когда я «отслеживаю» код и пытаюсь конкретно найти одну часть функции.
  • Отладка - информация, которая диагностически полезна не только разработчикам (ИТ, системным администраторам и т. д.).
  • Информация - обычно полезная информация для регистрации (запуск / остановка службы, предположения о конфигурации и т. д.). Информация Я хочу всегда иметь под рукой, но обычно не забочусь о ней при нормальных обстоятельствах. Это уровень моей нестандартной конфигурации.
  • Предупреждение - все, что потенциально может вызвать странные проблемы в работе приложения, но которые я восстанавливаю автоматически. (Например, переключение с основного на резервный сервер, повторная попытка операции, отсутствие дополнительных данных и т. Д.)
  • Ошибка - любая ошибка, которая является фатальной для операции, но не для службы или приложения (невозможно открыть требуемый файл, отсутствуют данные и т. д.). Эти ошибки заставят пользователя (администратора или прямого пользователя) вмешаться. Обычно они зарезервированы (в моих приложениях) для неправильных строк подключения, отсутствующих служб и т. Д.
  • Неустранимая - любая ошибка, вызывающая завершение работы службы или приложения для предотвращения потери данных (или дальнейшей потери данных). Я оставляю их только на случай самых серьезных ошибок и ситуаций, когда гарантировано, что данные были повреждены или утеряны.
person GrayWizardx    schedule 08.01.2010
comment
Почему нельзя слить инфу и предупредить! ??! Это не предупреждение о чем-то на самом деле ... - person mP.; 02.02.2011
comment
@mP Вы можете объединить информацию и предупредить, я думаю, обычно они разделены из-за принципа паники. Если у меня есть куча информации, которая является рутиной, и я просто перечисляю состояние, на самом деле не стоит смотреть сначала, но если есть масса предупреждений, я хочу видеть те, которые имеют приоритет (после ошибок и фатальных ошибок), чтобы я мог изучить их. Я был бы больше напуган множеством предупреждений, чем информационными сообщениями. - person GrayWizardx; 03.02.2011
comment
Если HTTP ошибочен по какой-либо причине (например, приводит к ответу 4xx), должно ли это приводить к сообщению WARN или INFO? - person dzieciou; 22.06.2015
comment
@dzieciou, это зависит от ваших конкретных потребностей. Иногда это могло быть фатальным, иногда просто предупреждением. Если бы я получил 4xx от критически важного сервиса, от которого я зависел и не могу продолжать, это было бы ошибкой / фатальным для моих проектов. Если бы я пытался кэшировать некоторые данные для последующего использования, но мог бы жить без них, это было бы ПРЕДУПРЕЖДЕНИЕ. Единственный раз, когда я вижу, что это информация, это что-то вроде приложения для мониторинга, которое сообщает о статусе своих проверок URL. Итак, я бы записал в журнал INFO, что получил 4xx из URL-адреса, и двинулся дальше. - person GrayWizardx; 09.07.2015
comment
@GrayWizardx, я думаю, что другой фактор - это клиент, который получил 4xx, или сервер, который его отправил. В первом случае я был бы более склонен использовать ERROR (OMG, это моя вина, что я не могу подготовить правильный запрос), а во втором случае я бы зарегистрировал WARN (это ошибка клиентов, они не могут правильно формулировать запросы) - person dzieciou; 10.07.2015
comment
какой уровень ведения журнала лучше всего использовать, чтобы показать, что происходит за сценой? INFO? - person Ciasto piekarz; 02.07.2016
comment
@Ciastopiekarz, это зависит от того, что вы имеете в виду под кулисами. Я предполагаю, что ваши журналы не видны потребителям приложения (или их нелегко найти), и в этом случае INFO действительно может быть правильным уровнем. Если вы говорите о том, что происходит внутри закрытых / удаленных компонентов, это зависит от конструкции этих компонентов или служб. Обычно я использую INFO и ERROR для наиболее важных сообщений и WARN и DEBUG для более подробной информации. - person GrayWizardx; 05.07.2016
comment
Подозреваю, что это правда - Debug - Information that is diagnostically helpful to people more than just developers (IT, sysadmins, etc.).. Logger.Debug предназначен только для разработчиков, чтобы отслеживать очень неприятные проблемы в производстве, например. If you want to print the value of a variable at any given point inside a for loop against a condition - person RBT; 09.02.2017
comment
А как насчет ГЛАГОЛЫ? Я ищу это. - person Saksham Chaudhary; 19.02.2021
comment
Должна ли какая-либо ошибка клиента 4xx регистрироваться как ПРЕДУПРЕЖДЕНИЕ или ОШИБКА? Поскольку больше нет FATAL в slf4j Client Error, класс 4xx стал на тот же уровень, что и класс Server Error 5xx. - person JackTheKnife; 14.06.2021

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

  • да -> ошибка
  • нет -> предупреждать
person pm100    schedule 08.01.2010
comment
За исключением того, что большинству людей все равно, вытаскивают ли они людей из постели по ночам. У нас были клиенты, которые поднимали списки критичности 1 (предназначенные для 100% сбоев, т. Е. Национальных), потому что один сайт не мог выполнять свою работу (их аргументация заключалась в том, что это 100% этого сайта). С тех пор мы обучили их этому. - person paxdiablo; 09.01.2010
comment
FATAL - это когда системный администратор просыпается, решает, что ему недостаточно за это заплатили, и снова засыпает. - person Mateen Ulhaq; 05.05.2017

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

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

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

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

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

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

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

person Jay Cincotta    schedule 11.03.2011
comment
Мне нравится, что думать о публике заставляет. Ключ в любом общении (а сообщения журнала - это форма общения) - думать о своей аудитории и о том, что ей нужно. - person sleske; 23.02.2015
comment
Об отладке ‹-› Трассировка: обратите внимание, что, по крайней мере, в Java-мире приоритетность отладки ›трассировки. Это соглашение, которое используют все известные мне фреймворки (SLF4J, Logback, log4j, Apache Commons Logging, Log4Net, NLog). Так что Debug ‹Trace кажется мне необычным. - person sleske; 23.02.2015
comment
@Jay Cincotta Отличный ответ. Я думаю, что Debug / Trace - это вопрос предпочтений, но, безусловно, такие детали, как правило, зависят от приложения / компании, поэтому хорошо видеть разные мнения. - person GrayWizardx; 09.07.2015
comment
Почему разработчику требуются журналы отладки, когда он отлаживает сам код с помощью интегрированной среды разработки (IDE)? Он может проверить, что идет не так, переступая через каждую часть кода. Не так ли? - person RBT; 09.02.2017
comment
Я только что провел обзор 7 фреймворков логирования на нескольких языках. Из трех, которые включают уровень серьезности трассировки, все имеют его как менее серьезный, чем отладка. т.е. трассировка ‹отладка; У меня нет реальных случаев, когда было бы наоборот. @RBT Взломать отладчик не всегда возможно. Например, веб-серверы должны обслуживать запросы в течение ограниченного времени или существовать в многопоточных и / или серверных средах, которые может быть трудно инструментировать, или ошибка может быть достаточно редкой, чтобы отладчик не подходил. Или вы не знаете, что ищете. - person Thanatos; 18.02.2017
comment
Чтобы избежать нежелательного шума, нужно иметь возможность изменять уровень отладки. Вы включаете отладку / трассировку только тогда, когда пытаетесь найти причину или место возникновения проблемы. В релизных сборках вы обязательно отключаете отладку / трассировку, возможно, даже Info. - person kashiraja; 16.03.2017
comment
@RBT Я работаю с системами Java более 4 лет. Я могу сказать вам, что то, о чем вы спрашиваете, совершенно непрактично. Отладка IDE может только зайти так далеко. В определенный момент вам просто понадобятся журналы отладки из другой системы (часто производственного сервера), чтобы понять, что происходит, и исправить ошибка. Вы можете подумать, что это должно быть воспроизведено в вашей локальной среде IDE, но если вы работаете с реальными системами, вы обнаружите, что часто многие ошибки являются уникальными для рабочего сервера. - person ADTC; 23.10.2017
comment
Ваше объяснение Trace было очень полезным. Спасибо! - person Pasha Skender; 27.04.2020

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


Apache log4j: 1, 2

  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 (как обычно) любит переборщить:

  1. # P16 #
    # P17 #
  2. # P18 #
    # P19 #
  3. крит:

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

    • "socket: Failed to get a socket, exiting child"
  4. ошибка:

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

    • "Premature end of script headers"
  5. # P24 #
    # P25 #
  6. уведомление:

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

    • "httpd: caught SIGBUS, attempting to dump core in ..."
  7. информация:

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

    • ["Server has been running for x hours."]
  8. отладка:

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

    • "Opening config file ..."
  9. trace1 trace6:

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

    • "proxy: FTP: control connection complete"
    • "прокси: CONNECT: отправка запроса CONNECT на удаленный прокси"
    • "openssl: рукопожатие: начало"
    • "читать из буферизованной бригады SSL, режим 0, 17 байт"
    • "НЕОБХОДИМО поиск по карте: map=rewritemap key=keyname"
    • "поиск в кэше НЕ СБОЙ, принудительный поиск новой карты"
  10. trace7 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:

  1. # P37 #
    # P38 #
  2. # P39 #
    # P40 #
  3. # P41 #
    # P42 #
  4. # P43 #
    # P44 #
  5. # P45 #
    # P46 #
  6. # P47 #
    # P48 #

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

Границы включают:

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

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

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

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

(Дополнительную информацию см. В руководстве по ведению журнала сообщества.)

person Pacerier    schedule 15.04.2016

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

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

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

person kvz    schedule 08.01.2013
comment
Мне нужен журнал трассировки, так как я хочу видеть, как что-то происходит в моем коде. Что делает системный журнал, чтобы это исправить? - person basickarl; 24.08.2017
comment
Трассировки обычно не являются чем-то, что вы хотели бы передавать через системный журнал, и я думаю, вы можете добавить этот уровень для своих собственных сеансов интерактивной отладки? - person kvz; 24.08.2017
comment
Все эти расширенные уровни увеличивают сложность логирования IMO. Лучше всего придерживаться простейшего набора, отвечающего потребностям конкретного приложения. Для меня вы должны начать с DEBUG, INFO, WARNING и ERROR. Разработчики должны видеть все уровни. Системные администраторы до INFO, а конечные пользователи могут видеть предупреждения и ошибки , но только при наличии инфраструктуры, предупреждающей их об этом. - person ADTC; 23.10.2017
comment
(продолжение) По мере развития приложения вы можете расширяться до большего количества уровней, если это необходимо. Как и DEBUG, и TRACE для разработчиков, чтобы контролировать степень детализации. И ERROR расширен до других уровней, таких как CRITICAL, ALERT, EMERGENCY, чтобы различать серьезность ошибок и определять действие на основе серьезности. - person ADTC; 23.10.2017

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

person Ignacio Vazquez-Abrams    schedule 08.01.2010
comment
Но в чем же тогда разница между ошибкой и фатальной ошибкой? - person user192472; 09.01.2010
comment
Ошибка - это то, что вы делаете (например, читаете несуществующий файл), фатальная ошибка - это то, что вам сделали (например, закончилась нехватка памяти). - person Ignacio Vazquez-Abrams; 09.01.2010
comment
@ IgnacioVazquez-Abrams Мне нравится ваш способ отличить. Но какой ваш комментарий основан на чем? AFIAK среди разработчиков iOS принято писать утверждение, относящееся к fatalError, когда файл не существует. По сути, это противоположно тому, что вы сказали. - person Honey; 17.07.2017
comment
@Honey: В мобильной ситуации отсутствие файла разумно считать фатальной ошибкой. - person Ignacio Vazquez-Abrams; 17.07.2017

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

шпаргалка: какой уровень журнала мне следует использовать

person Taco Jan Osinga    schedule 12.11.2020
comment
Примерно так же, как и у меня, за исключением того, что для меня WARN не всегда означает нежелательное состояние, но также может означать, что в некоторых обстоятельствах вы можете оказаться там, где вы не хотите быть. Например, на почтовом сервере, если вы включили аутентификацию , но не требует TLS, сервер должен зарегистрировать предупреждение. Итак, перед INFO есть дополнительный бриллиант. - person pepoluan; 04.12.2020
comment
Это отличный пример предупреждения, которое я также имел в виду с «нежелательным состоянием». «Нежелательное состояние» следует понимать в широком смысле. - person Taco Jan Osinga; 04.12.2020

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

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

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

person paxdiablo    schedule 08.01.2010
comment
Если база данных имеет определенный набор символов, который не включает умляут, этот ввод должен быть отклонен. - person Cochise Ruhulessin; 13.12.2018
comment
Кочиз, мир редко бывает таким черно-белым :-) - person paxdiablo; 14.12.2018

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

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

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

person Michael Ekstrand    schedule 08.01.2010

Из RFC 5424 протокол системного журнала (IETF) - стр. 10:

Каждый приоритет сообщения также имеет десятичный индикатор уровня важности. Они описаны в следующей таблице вместе с их числовыми значениями. Значения серьезности ДОЛЖНЫ быть в диапазоне от 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

          Table 2. Syslog Message Severities
person ThangTD    schedule 11.04.2017

Я полностью согласен с остальными и думаю, что GrayWizardx сказал это лучше всего.

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

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

Хорошо, это фатально разобрались, теперь давайте посмотрим на ошибки ... промыть и повторить.

Ниже Fatal или, возможно, Error, я бы предположил, что больше информации всегда лучше, чем меньше, поэтому ошибайтесь «вверх». Не уверены, это информация или предупреждение? Тогда сделайте это предупреждением.

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

Вот некоторые примеры:

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

Ошибка - нет ответа на сообщение, транзакция прервана, не удается сохранить файл и т. д.

Предупреждение: выделение ресурсов достигает X% (скажем, 80%) - это признак того, что вы, возможно, захотите изменить размер своего.

Информация - пользователь вошел / вышел, новая транзакция, файл добавлен в корзину, новое поле d / b или поле удалено.

Отладка - дамп внутренней структуры данных, уровень трассировки Anything с именем файла и номером строки.
Трассировка - действие выполнено успешно / не удалось, d / b обновлено.

person Mawg says reinstate Monica    schedule 10.01.2010

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

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

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

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

person volkerk    schedule 18.06.2014

Доброго времени суток,

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

Больно видеть огромное количество сообщений журнала, в которых серьезность и выбранные уровни журнала несовместимы.

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

HTH

person Rob Wells    schedule 08.01.2010

Ответ Taco Jan Osinga очень хорош и очень практичен.

Я частично согласен с ним, хотя и с некоторыми вариациями.

В Python есть только 5 именованных уровней ведения журнала, вот как я их использую:

  • DEBUG - информация, важная для устранения неполадок и обычно подавляемая при нормальной повседневной работе.
  • INFO - повседневная работа как доказательство того, что программа выполняет свои функции, как задумано
  • WARN - нестандартная, но исправимая ситуация, * или * столкновение с чем-то, что может привести к проблемам в будущем
  • ERROR - произошло что-то, что требует от программы выполнения восстановления, но восстановление выполняется успешно. Однако программа, скорее всего, не находится в первоначально ожидаемом состоянии, поэтому пользователю необходимо будет ее адаптировать.
  • CRITICAL - произошло что-то, что не может быть восстановлено, и программа, вероятно, должна быть завершена, чтобы все не жили в состоянии греха
person pepoluan    schedule 04.12.2020

Ошибка - это что-то неправильное, совершенно неправильное, никак не обойтись, это необходимо исправить.

Предупреждение - это признак шаблона, который может быть неправильным, но может и не быть.

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

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

person Lasse V. Karlsen    schedule 08.01.2010
comment
Хорошим примером предупреждения является то, что в MySQL по умолчанию, если вы пытаетесь вставить больше символов в varchar, чем определено, он предупреждает вас, что значение было усечено, но все же вставляет его. Но предупреждение одного человека может быть ошибкой другого: в моем случае это ошибка; это означает, что я допустил ошибку в коде проверки, указав длину, несовместимую с базой данных. И я не был бы сильно удивлен, если бы другой движок БД посчитал это ошибкой, а я не имел бы права возмущаться, в конце концов, это ошибочно. - person Crast; 09.01.2010
comment
Я бы тоже счел это ошибкой. В некоторых случаях содержимое представляет собой текст (не в значении типа данных), что означает, что возможно его можно обрезать. В другом случае это код, где отрубание битов повредит его или изменит его значение, что не нормально. На мой взгляд, программное обеспечение не должно пытаться угадать, что я имел в виду. Если я попытаюсь принудительно поместить 200-символьную строку в столбец, который занимает всего 150 символов, это проблема, о которой я хотел бы знать. Однако мне нравится различие, проведенное другими здесь, что если вы можете восстановить, это предупреждение, но тогда ... вам нужно войти? - person Lasse V. Karlsen; 09.01.2010
comment
Я мог бы придумать один пример: какое-то сообщение обрабатывается на удивление дольше, чем обычно. Это может быть признаком того, что что-то не так (возможно, какая-то другая система перегружена или внешний ресурс временно не работает). - person Laradda; 05.01.2017

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

person dicroce    schedule 08.01.2010

Мои два цента об уровнях журнала ошибок FATAL и TRACE.

ERROR - это когда возникает НЕИСПРАВНОСТЬ (исключение).

FATAL на самом деле ДВОЙНАЯ ОШИБКА: когда возникает исключение при обработке исключения.

Для веб-службы это легко понять.

  1. Запрос пришел. Событие регистрируется как INFO
  2. Система обнаруживает нехватку места на диске. Событие регистрируется как WARN
  3. Для обработки запроса вызывается какая-то функция. При обработке происходит деление на ноль. Событие регистрируется как ERROR
  4. Обработчик исключений веб-службы вызывается для обработки деления на ноль. Веб-сервис / фреймворк собирается отправлять электронную почту, но не может, потому что почтовая служба сейчас отключена. Это второе исключение не может быть обработано обычным образом, потому что обработчик исключений веб-службы не может обработать исключение.
  5. Вызван другой обработчик исключений. Событие регистрируется как FATAL

TRACE - это когда мы можем отслеживать вход / выход из функции. Речь идет не о ведении журнала, потому что это сообщение может быть сгенерировано каким-либо отладчиком, а ваш код вообще не обращается к log. Таким образом, сообщения, которые не из вашего приложения, помечаются как уровень TRACE. Например, вы запускаете свое приложение с strace

Итак, как правило, в вашей программе вы регистрируете DEBUG, INFO и WARN. И только если вы пишете какой-нибудь веб-сервис / фреймворк, вы будете использовать FATAL. И когда вы отлаживаете приложение, вы получите TRACE журнал от этого типа программного обеспечения.

person Eugen Konkov    schedule 22.02.2020

Раньше я создавал системы, в которых использовалось следующее:

  1. ОШИБКА - означает, что что-то серьезно не так, и этот конкретный поток / процесс / последовательность не может продолжаться. Требуется некоторое вмешательство пользователя / администратора
  2. ПРЕДУПРЕЖДЕНИЕ - что-то не так, но процесс может продолжаться, как и раньше (например, одно задание из набора из 100 не удалось, но остальные могут быть обработаны)

В системах, которые я построил, администраторы должны были реагировать на ОШИБКИ. С другой стороны, мы будем следить за ПРЕДУПРЕЖДЕНИЯМИ и определять для каждого случая, требуются ли какие-либо системные изменения, перенастройки и т. Д.

person Brian Agnew    schedule 08.01.2010

Кстати, я большой любитель собирать все и фильтровать информацию позже.

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

Снимайте все и фильтруйте позже!

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

Захватите все и отфильтруйте позже !!

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

person Mawg says reinstate Monica    schedule 10.01.2010

Предлагаю использовать только три уровня

  1. Fatal - что приведет к поломке приложения.
  2. Информация - Информация
  3. Отладка - менее важная информация
person Dinesh Kumar    schedule 28.08.2019
comment
Это легко для разработчика, но раздражает оператора. - person Natacha; 15.07.2021
comment
@Natacha это на самом деле упрощено - person Dinesh Kumar; 16.07.2021