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


520

Есть разные способы записи сообщений в порядке фатальности:

  1. FATAL

  2. ERROR

  3. WARN

  4. INFO

  5. DEBUG

  6. TRACE

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

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


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

@ Волк, где «заметить» подпадает под эту иерархию? Просто для записи ...
pgblu

1
noticeвполне может отсутствовать, потому что некоторые популярные службы регистрации, такие как log4j, не используют его.
pgblu

Ответы:


750

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

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

2
Почему вы не можете объединить информацию и предупредить! ??! Не предупреждение о чем-то на самом деле "информация" ...
М.П.

35
@mP Вы можете объединить информацию и предупредить, я думаю, что в целом они являются отдельными из-за принципа "паники". Если у меня есть куча информации, которая является рутиной и просто выводит из нее состояние, ее действительно не стоит рассматривать «первым», но если есть тонны «предупреждений», я хочу видеть эти приоритеты (после ошибок и фатальных ошибок), чтобы я мог посмотреть в их. Я был бы более "запаникован" при большом количестве предупреждений, чем при большом количестве информационных сообщений.
GrayWizardx

3
@dzieciou, это зависит от ваших конкретных потребностей. Иногда это может быть фатальным, иногда просто предупреждением. Если бы я получил 4xx от критически важного сервиса, от которого я зависел, и не смогу продолжить, это было бы ошибкой / фатальным для моих проектов. Если бы я пытался кэшировать некоторые данные для последующего использования, но мог бы жить без них, это было бы ПРЕДУПРЕЖДЕНИЕМ. Единственный раз, когда я вижу, что это информация, это что-то вроде приложения для мониторинга, которое сообщает о статусе своих проверок URL. Так что я бы ИНФОРМАЦИЯ войти, что я получил 4xx от URL и двигаться дальше.
GrayWizardx

2
@GrayWizardx, я думаю, что другой фактор - это клиент, который получил 4xx, или сервер, который его отправил. В первом случае я бы с большей готовностью использовал ERROR (OMG, я виноват, что не могу подготовить правильный запрос), в то время как в последнем случае я бы регистрировал WARN (это вина клиентов, что они не могут правильно сформулировать запросы)
dzieciou

4
Я подозреваю, что это правда 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
RBT

304

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

  • да -> ошибка
  • нет -> предупредить

11
За исключением того, что большинству людей все равно, если они заставляют людей вставать с постели ночью. У нас были клиенты, поднятые до 1 уровня серьезности (предназначенного для 100% -ого отключения, то есть национального), потому что один сайт не мог выполнить свою работу (их рассуждение состояло в том, что это - 100% этого сайта). С тех пор мы «обучили» их на этот счет.
paxdiablo

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

135

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

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

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

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

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

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

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


3
Мне нравится, что это заставляет думать об аудитории. Ключ в любом общении (а сообщения в журнале - это форма общения) - думать о своей аудитории и о том, что ей нужно.
слеске

18
О трассировке отладки <->: обратите внимание, что, по крайней мере, в Java-land порядок приоритетов - «трассировка отладки». Это соглашение, которое используют все известные мне фреймворки логирования (SLF4J, Logback, log4j, Apache Commons Logging, Log4Net, NLog). Так что Debug <Trace кажется мне необычным.
Слеське

1
@ Джей Синкотта Отличный ответ. Я думаю, что отладка / трассировка - это вопрос предпочтения, но, конечно, такого рода детали, как правило, зависят от приложения / компании, поэтому приятно видеть различные мнения.
GrayWizardx

5
Я только что провел обзор 7 каркасов журналов на нескольких языках. Из трех, которые включают уровень серьезности «трассировки», все они имеют его как менее серьезный, чем отладка. то есть, трассировка <отладка; У меня нет реальных случаев, когда верно обратное. @RBT Не всегда возможно взломать отладчик. Например, веб-серверы должны обслуживать запросы в течение ограниченного периода времени или существовать в многопоточных и / или серверных средах, которые могут быть затруднены для применения, или ошибка может быть достаточно редкой, чтобы отладчик не был опцией. Или вы не знаете, что ищете.
Танатос

5
@RBT Я работаю с системами Java более 4 лет. Я могу сказать вам, что то, что вы спрашиваете, совершенно нецелесообразно. Отладка IDE может привести вас только к этому. В определенный момент вам просто нужны журналы отладки из другой системы (часто с рабочего сервера), чтобы понять, что происходит, и исправить ошибку. Вы можете подумать, что это должно быть воспроизводимо в вашей локальной IDE, но если вы работаете с реальными системами, вы обнаружите, что часто многие ошибки являются уникальными для рабочего сервера.
ADTC

30

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


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. Emerg :

    Чрезвычайные ситуации - система не работает.

  2. оповещение :

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

  3. крит :

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

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

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

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

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

  6. уведомление :

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

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

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

    • Сервер работает в течение x часов. »]
  8. отладка :

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

    • " Открытие файла конфигурации ... "
  9. trace1trace6 :

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

    • " прокси: FTP: управляющее соединение установлено "
    • « proxy: CONNECT: отправка запроса CONNECT на удаленный прокси »
    • " openssl: рукопожатие: начало "
    • « читать из буферизованной бригады SSL, режим 0, 17 байт »
    • " Поиск по карте НЕ УКАЗАН:map=rewritemap key=keyname "
    • " Сбой поиска в кэше, форсированный поиск новой карты "
  10. trace7trace8 :

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

    • " | 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 Commons-Logging: §

  1. фатальный :

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

  2. ошибка :

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

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

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

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

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

  5. отладка :

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

  6. трассировка :

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

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

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

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

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

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

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

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


24

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


5
Но тогда, в чем разница между ошибкой и фатальной ошибкой?
user192472

37
Ошибка - это то, что вы делаете (например, читаете несуществующий файл), фатальная ошибка - это то, что делается с вами (например, нехватка памяти).
Игнасио Васкес-Абрамс

@ IgnacioVazquez-Abrams Мне нравится ваш способ отличить. Но на чем ваш комментарий основан на чем? AFIAK среди разработчиков iOS принято писать утверждение, которое относится к случаям, fatalErrorкогда файл не существует. По сути это противоположно тому, что вы сказали.
Дорогая

@Honey: В мобильной ситуации разумно считать пропущенный файл фатальной ошибкой.
Игнасио Васкес-Абрамс

23

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

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

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


1
Мне нужен журнал трассировки, поскольку я хочу видеть, как все выполняется в моем коде. Что делает системный журнал, чтобы исправить это?
К - Токсичность в СО растет.

Трассировки, как правило, не то, что вы хотели бы передать по системному журналу, и я думаю, что вы можете добавить этот уровень для своих сеансов интерактивной отладки?
kvz

2
Все эти расширенные уровни увеличивают сложность регистрации IMO. Лучше придерживаться простейшего набора, отвечающего потребностям конкретного приложения. Для меня, вы должны начать с DEBUG, INFO, WARNINGи ERROR. Разработчики должны видеть все уровни. SysAdmins вплоть до INFO, и конечные пользователи могут видеть предупреждения и ошибки, но только если есть структура, чтобы предупредить их об этом .
ADTC

1
(продолжение) По мере взросления приложения вы можете расширяться до нескольких уровней, если это необходимо. Как DEBUGи TRACEдля разработчиков, чтобы контролировать гранулярность. И ERRORрасширено до других уровней нравятся CRITICAL, ALERT, EMERGENCYчтобы отличить серьезность ошибок и определить действия , основанные на степени тяжести.
ADTC

17

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

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

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


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

Cochise, мир редко бывает таким черно-белым :-)
paxdiablo

6

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

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

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


5

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

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

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

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


5

Из 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

4

G'day,

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

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

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

НТН


4

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

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

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

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

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

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

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

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

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

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

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

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


3

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

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

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

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


1
Хорошим примером предупреждения является то, что в MySQL по умолчанию, если вы пытаетесь вставить больше символов, varcharчем это определено, он предупреждает вас о том, что значение было усечено, но все равно вставляет его. Но предупреждение одного человека может быть ошибкой другого: в моем случае это ошибка; это означает, что я допустил ошибку в своем коде проверки, определив длину, не совпадающую с базой данных. И я не был бы ужасно удивлен, если бы другой движок БД посчитал это ошибкой, и у меня не было бы реального права возмущаться, в конце концов, это ошибочно.
Crast

Я бы тоже счел это ошибкой. В некоторых случаях содержимое представляет собой «текст» (не в значении типа данных), что означает, что, возможно, его можно урезать. В другом случае это код, где обрезание битов приведет к его повреждению или изменению значения, что не в порядке. По моему мнению, не программное обеспечение пытается угадать, что я имел в виду. Если я попытаюсь вставить строку из 200 символов в столбец, который занимает всего 150 символов, я хотел бы знать об этой проблеме. Я, однако, как и различие, сделанное другими здесь, заключается в том, что если вы можете выздороветь, это предупреждение, но тогда ... вам нужно войти?
Лассе В. Карлсен

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

3

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


1

До этого я создавал системы, использующие следующее:

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

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


1

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

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

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

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

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

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


1

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

ERROR когда происходит какой-то сбой (исключение).

FATAL на самом деле DOUBLE FAULT: когда происходит исключение во время обработки исключения.

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

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

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

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


0

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

  1. Fatal - Что бы сломать приложение.
  2. Инфо - Инфо
  3. Отладка - Менее важная информация
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.