Коли використовувати різні рівні журналу


520

Існують різні способи реєстрації повідомлень у порядку фатальності:

  1. FATAL

  2. ERROR

  3. WARN

  4. INFO

  5. DEBUG

  6. TRACE

Як вирішити, коли використовувати який?

Що добре використовувати евристику?


11
Досить широке питання. Тож можливо більше однієї відповіді, залежно від реальних обставин ведення журналу. Хтось пропустить noticeу цій колекції хтось не стане ...
Вовк

@Wolf, де "помітити" під цю ієрархію? Тільки для запису ...
pgblu

1
noticeможливо, відсутня, оскільки деякі популярні сервіси ведення журналів, такі як log4j, не використовують його.
pgblu

Відповіді:


750

Я, як правило, підписуюся на наступну конвенцію:

  • Trace - Тільки тоді, коли я б "простежував" код і намагався знайти одну частину функції конкретно.
  • Налагодження - інформація, яка діагностично допомагає людям більше, ніж просто розробникам (IT, sysadmins тощо).
  • Інформація - загально корисна інформація для ведення журналу (старт / зупинка послуги, припущення щодо конфігурації тощо). Інформація, яку я хочу завжди мати, але зазвичай це не турбується за звичайних обставин. Це мій вихідний рівень конфігурації.
  • Попереджаю - все, що потенційно може спричинити диваки у застосуванні, але я автоматично одужую. (Наприклад, перехід з основного на резервний сервер, повторна операція, відсутні вторинні дані тощо)
  • Помилка - будь-яка помилка, фатальна для операції , але не служба або додаток (не вдається відкрити потрібний файл, відсутні дані тощо). Ці помилки змусять втручання користувача (адміністратора чи прямого користувача). Зазвичай вони зарезервовані (у моїх програмах) для неправильних рядків з'єднання, відсутніх служб тощо.
  • Фатальна - будь-яка помилка, яка змушує відключити послугу чи додаток для запобігання втрати даних (або подальшої втрати даних). Я залишаю за собою лише найбільш грізні помилки та ситуації, коли гарантується, що сталося пошкодження чи втрата даних.

2
Чому не можеш злити інформацію та попередити! ??! Чи не попередження про щось насправді "інфо" ...
mP.

35
@mP Ви можете злити інформацію та попередити, я думаю, як правило, вони є окремими через принцип "паніки". Якщо у мене є маса відомостей, які є рутинними і просто перелічуючи стан, його не варто переглядати "спочатку", але якщо є тонни "попереджень", я хочу бачити ці пріоритетні (після помилок і фатальних випадків), щоб я міг заглянути їх. Мені було б більше "панікувати" при багатьох попередженнях, ніж багато інформаційних повідомлень.
GrayWizardx

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

2
@GrayWizardx, я думаю, другий фактор - це це клієнт, який отримав 4xx, або сервер, який його надіслав. У першому випадку я хотів би скористатись ПОМИЛОЮ (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

303

Ви хочете, щоб повідомлення про те, щоб посеред ночі встати з ліжка системного адміністратора?

  • так -> помилка
  • ні -> попереджають

11
За винятком того, що більшість людей не хвилює, якщо люди вночі встають з ліжка. У нас були клієнти, які піднімають ступінь суворості-1 (призначений для 100% відключення, тобто національний), оскільки один сайт не міг виконувати свою роботу (їх міркування полягали в тому, що це 100% цього сайту). Ми з тих пір "навчали" їх на цьому рахунку.
paxdiablo

53
FATALколи сидсмін прокидається, вирішує, що йому за це недостатньо заплатили, і повертається спати.
Матін Ульхак

134

Мені корисніше думати про суворість з точки зору перегляду файлу журналу.

Фатальний / критичний : Загальна несправність програми або системи, яку слід негайно дослідити. Так, прокинься SysAdmin. Оскільки ми віддаємо перевагу нашим сповіщенням SysAdmins та добре відпочившим, цю суворість слід застосовувати дуже рідко. Якщо це відбувається щодня і це не BFD, це втрачає сенс. Зазвичай фатальна помилка трапляється лише один раз у процесі роботи, тому якщо файл журналу прив’язаний до процесу, це, як правило, останнє повідомлення в журналі.

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

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

Інформація : Це важлива інформація, яку слід реєструвати за звичайних умов, таких як успішна ініціалізація, запуск та зупинення послуг або успішне завершення значних транзакцій. Перегляд журналу, що показує інформацію та вище, повинен дати швидкий огляд основних змін стану в процесі, що забезпечує контекст верхнього рівня для розуміння будь-яких попереджень або помилок, які також трапляються. Не надто багато інформаційних повідомлень. Зазвичай у нас є <5% інформаційних повідомлень щодо Trace.

Сліди : сліди - це далеко не найчастіше використовувана суворість і повинні містити контекст для розуміння кроків, що призводять до помилок та попереджень. Наявність правильної щільності повідомлень Trace робить програмне забезпечення набагато більш ретельним, але вимагає певної ретельності, оскільки значення окремих висловлювань Trace може змінюватися з часом у міру розвитку програм. Найкращий спосіб досягти цього - отримати звичку команди розробників регулярно переглядати журнали як стандартну частину усунення неполадок, про які повідомляються клієнти. Заохочуйте команду вирізати повідомлення відстеження, які більше не надають корисний контекст, та додавати повідомлення, де це потрібно для розуміння контексту наступних повідомлень. Наприклад, часто корисно реєструвати дані користувачів, такі як зміна дисплеїв або вкладок.

Налагодження : ми вважаємо налагодження <слід. Відмінність полягає в тому, що повідомлення про налагодження складаються з версій версій. Це означає, що ми не рекомендуємо використовувати повідомлення налагодження. Дозвіл повідомлень про налагодження, як правило, призводить до додавання все більше і більше повідомлень про налагодження і жодного разу не видаляється. З часом це робить журнальні файли майже марними, оскільки фільтрувати сигнал із шуму занадто важко. Це змушує дияволів не використовувати журнали, які продовжують спіраль смерті. На відміну від цього, постійне обрізання повідомлень про сліди спонукає розробників використовувати їх, що призводить до доброї спіралі. Крім того, це виключає можливість введення помилок через необхідні побічні ефекти в коді налагодження, який не входить у версію версії. Так, я знаю, що це не повинно статися в хорошому коді, але краще безпечно, тоді шкода.


2
Мені подобається, що це наголошує на думці про аудиторію. Головне в будь-якому спілкуванні (а повідомлення журналу - це форма спілкування) - подумати про свою аудиторію та те, що їй потрібно.
sleske

18
About Debug <-> Trace: Зауважте, що принаймні в Java-land пріоритетним порядком є ​​"debug> trace". Це звичайно всі рамки ведення журналу, які я знаю, використовую (SLF4J, Logback, log4j, Apache Commons Logging, Log4Net, NLog). Тож налагодження <Трейс мені здається незвичним.
sleske

1
@Jay Cincotta Чудова відповідь. Я думаю, що налагодження / трасування є питанням уподобань, але, безумовно, такі деталі, як правило, специфічні для додатків / компаній, тому добре бачити різні думки.
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. виникають :

    Надзвичайні ситуації - система непридатна.

  2. попередження :

    Дія повинна бути вжита негайно [але система все ще доступна].

  3. критичний :

    Критичні умови [але вживати заходів не потрібно негайно].

    • " socket: не вдалося отримати розетку, що виходить з дитини "
  4. помилка :

    Умови помилок [але не критичні].

    • " Передчасний кінець заголовків сценарію "
  5. попередити :

    Умови попередження. [близько до помилки, але не помилки]

  6. повідомлення :

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

    • " httpd: спіймано SIGBUS, намагаючись скинути ядро ​​у ... "
  7. інформація :

    Інформаційна [і непомітна].

    • [" Сервер працює протягом x годин. "]
  8. налагодження :

    Повідомлення на рівні налагодження [тобто повідомлення, зареєстровані для усунення помилок ]].

    • " Відкриття конфігураційного файлу ... "
  9. trace1trace6 :

    Повідомлення про відстеження [тобто повідомлення, що реєструються задля відстеження ].

    • " проксі: FTP: з'єднання управління завершено "
    • " проксі: CONNECT: надсилання запиту CONNECT на віддалений проксі "
    • " openssl: Handshake: start "
    • " читати з буферизованої бригади 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 commons-logging розрізняють налагодження та інформацію залежно від того, які межі вони перетинають.

Межі включають:

  • Зовнішні межі - очікувані винятки.

  • Зовнішні межі - несподівані винятки.

  • Внутрішні межі.

  • Значні внутрішні межі.

(Див. Посібник із загального журналу для отримання додаткової інформації про це.)


24

Якщо ви можете оговтатися від проблеми, то це попередження. Якщо це заважає продовжувати виконання, то це помилка.


5
Але тоді, в чому різниця між помилкою та фатальною помилкою?
користувач192472

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
Мені потрібен журнал слідів, тому що я хочу побачити, як все виконується в моєму коді. Що робить syslog, щоб виправити це?
Карл Моррісон

Сліди, як правило, не те, що ви хочете передати через syslog, і я думаю, ви можете додати цей рівень для власних інтерактивних сесій налагодження?
kvz

2
Усі ці розширені рівні збільшують складність реєстрації ІМО. Краще дотримуватися найпростішого набору, що обслуговує конкретні потреби додатка. Для мене, ви повинні почати з DEBUG, INFO, WARNINGі ERROR. Розробники повинні бачити всі рівні. SysAdmins до INFO, і Кінцеві користувачі можуть бачити попередження та помилки, але лише за умови, що є рамки, щоб сповістити їх про це .
ADTC

1
(продовження) По мірі того, як програма дозріває, ви можете розширити її на більше рівнів, якщо це потрібно. Як DEBUGі TRACEрозробникам контролювати деталізацію. І ERRORрозширено на інші рівні, як CRITICAL, наприклад ALERT, EMERGENCYщоб розрізнити серйозність помилок та визначити дію на основі суворості.
ADTC

17

Попередження, з яких можна відновити. Помилки, яких ви не можете. Це моє евристичне, інші можуть мати інші ідеї.

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

На противагу цьому, намагаючись записати цю інформацію в базу даних і повернути мережеве повідомлення вниз протягом 60 секунд. Це скоріше помилка, ніж попередження.


Якщо база даних знаходиться у певному наборі символів, що не включає в себе umlaut, цей вхід необхідно відхилити.
Cochise Ruhulessin

Кохіза, світ рідко буває чорно-білим :-)
paxdiablo

6

Як говорили інші, помилки - це проблеми; попередження - це потенційні проблеми.

У процесі розробки я часто використовую попередження, де можу поставити еквівалент відмови у твердженні, але додаток може продовжувати працювати; це дає мені змогу дізнатися, чи трапляється такий випадок, чи це моя уява.

Але так, це зводиться до аспектів відновлення та актуальності. Якщо ви зможете відновитись, це, мабуть, попередження; якщо це призводить до того, що щось насправді виходить з ладу, це помилка.


5

Я думаю, що ПОЗИЦІЯ про рівні SYSLOG та ALERT / EMERGENCY значною мірою зайві для ведення журналів на рівні додатків - в той час як CRITICAL / ALERT / EMERGENCY можуть бути корисними рівнями попередження для оператора, які можуть викликати різні дії та сповіщення, адміністратору програми все те саме, що FATAL. І я просто не можу в достатній мірі розрізнити отримання повідомлення або певної інформації. Якщо інформація не заслуговує уваги, це насправді не інформація :)

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

Однак є рівень реєстрації, який мені подобається бачити в моїх журналах помилок під час носіння капелюха sysadmin стільки, скільки у технічної підтримки або навіть розробника: OPER, для ОПЕРАЦІЙНИХ повідомлень. Це я використовую для реєстрації часової позначки, типу операції, що викликається, наданих аргументів, можливо, (унікального) ідентифікатора завдання та виконання завдання. Він використовується, коли, наприклад, звільняється автономна задача, що є справжньою викликом з-за великого довго працюючого додатка. Це те, про що я хочу завжди реєструватися, незалежно від того, що щось піде не так, чи ні, тому я вважаю, що рівень OPER є вищим за FATAL, тому ви можете вимкнути його, лише перейшовши на повністю безшумний режим. І це набагато більше, ніж прості дані журналу INFO - рівень журналу часто зловживають для створення спам-журналів із незначними операційними повідомленнями, які не мають жодної історичної цінності.

У випадку, коли це диктує випадок, ця інформація може бути спрямована до окремого журналу викликів, або може бути отримана, відфільтрувавши її з великого журналу запису додаткової інформації. Але, як історична інформація, завжди потрібно знати, що робиться - без пониження до рівня AUDIT, ще один абсолютно окремий рівень журналу, який не має нічого спільного з несправностями або роботою системи, насправді не вписується в вищевказані рівні ( оскільки йому потрібен власний комутатор управління, а не класифікація суворості) і який, безумовно, потрібен власний окремий файл журналу.


5

З RFC 5424, протокол Syslog (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

День,

Як наслідок цього питання, повідомте свої інтерпретації рівнів журналу та переконайтесь, що всі люди в проекті вирівняні у своїй інтерпретації рівнів.

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

Надайте, якщо можливо, приклади різних рівнів ведення журналу. І будьте послідовними в інформації, яку потрібно увійти в повідомлення.

HTH


4

Я повністю згоден з іншими, і думаю, що GrayWizardx сказав це найкраще.

Все, що я можу додати, - це те, що ці рівні, як правило, відповідають їхнім словниковим визначенням, тому це не може бути таким важким. Якщо ви сумніваєтесь, поводьтеся з цим, як із загадкою. Для вашого конкретного проекту подумайте про все, що ви хочете записати.

Тепер ви можете зрозуміти, що може бути фатальним? Ви знаєте, що фатально означає, чи не так? Отже, які пункти у вашому списку є фатальними.

Гаразд, це фатально розібралося, тепер давайте розглянемо помилки ... промийте та повторіть.

Нижче фатальної чи, можливо, помилки, я б припустив, що більше інформації завжди краще, ніж менше, тому помиляйтесь "вгору". Не знаєте, чи це інформація чи попередження? Потім зробіть це попередження.

Я думаю, що Фатальна та помилка повинні бути зрозумілі всім нам. Інші можуть бути нечіткішими, але це, мабуть, менш важливо, щоб виправити їх правильно.

Ось кілька прикладів:

Фатально - не може виділити пам'ять, базу даних тощо - не може продовжуватися.

Помилка - немає відповіді на повідомлення, трансакція перервана, не вдається зберегти файл тощо.

Попередження - розподіл ресурсів досягає X% (скажімо, 80%) - це ознака того, що ви можете змінити розмір свого.

Інформація - користувач увійшов / вийшов, нова транзакція, файл, створений у файлі, нове поле d / b або поле видалено.

Налагодження - дамп внутрішньої структури даних, рівень Any Trace з назвою файлу та номером рядка.
Простежити - дія вдалася / не вдалася, оновлено оновлення d / b.


3

Помилка - це щось неправильне, явно неправильне, ніякого способу цього не потрібно, і це потрібно виправити.

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

Сказавши це, я не можу привести гарного прикладу попередження, яке також не є помилкою. Я маю на увазі під цим те, що якщо ви перейдете на проблему реєстрації попередження, ви також можете виправити основну проблему.

Однак такі речі, як "виконання sql займає занадто багато часу", можуть бути попередженням, тоді як "тупінг виконання sql" є помилкою, тому, мабуть, є випадки.


1
Хорошим прикладом попередження є те, що в MySQL за замовчуванням, якщо ви намагаєтеся вставити більше символів у параметр a, varcharніж визначено, він попереджає вас про те, що значення було усічене, але все ж його вставляє. Але попередження однієї людини може бути помилкою іншої: У моєму випадку це помилка; це означає, що я зробив помилку в коді перевірки, визначивши довжину, несумісну з базою даних. І я не був би жахливо здивований, якби інший двигун БД вважав це помилкою, і я б не мав реального права обурюватися, зрештою, це помилково.
Крас

Я теж вважав би це помилкою. У деяких випадках вміст є "текстом" (не в значенні типу даних), а це означає, що, можливо , добре його усікати. В іншому випадку це код, де відрізання бітів зіпсує його або змінить його значення, що не в порядку. На мою думку, це не належить до програмного забезпечення намагатися вгадати, що я мав на увазі. Якщо я спробую примусити рядок на 200 символів у стовпчик, який містить лише 150 символів, про це я б хотів знати. Я, однак, люблю відмінність, яку тут роблять інші, що якщо ви можете відновитись, це попередження, але тоді ... чи потрібно вам увійти?
Лассе В. Карлсен

Один із прикладів, про який я міг би придумати, це: деяке повідомлення займає надихаючи більше часу, ніж зазвичай. Це може бути вказівкою на те, що щось не так (можливо, якась інша система перевантажена або зовнішній ресурс тимчасово не працює).
Laradda

3

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


1

Я будував системи до цього, використовуючи наступне:

  1. ПОМИЛКА - означає, що щось серйозно не так, і конкретна тема / процес / послідовність не може продовжуватись. Потрібно певне втручання користувача / адміністратора
  2. ПОПЕРЕДЖЕННЯ - щось невірно, але процес може тривати, як і раніше (наприклад, одна робота в наборі 100 не вдалася, але решту можна обробити)

У створених мною системах адміністратори проходили інструкцію щодо реагування на ПОМИЛКИ. З іншого боку, ми б спостерігали за ПОПЕРЕДЖЕННЯми та визначали для кожного випадку, чи потрібні якісь зміни системи, переналаштування тощо.


1

До речі, я великий шанувальник захоплення всього та фільтрування інформації пізніше.

Що буде, якщо ви захопили на рівні попередження і хочете отримати інформацію про налагодження, пов’язану з попередженням, але не змогли відтворити попередження?

Зробіть все і відфільтруйте пізніше!

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

Захопіть усе і фільтруйте пізніше !!

(btw, фіксуйте все також добре, тому що він дозволяє розробляти інструменти для того, щоб зробити більше, ніж просто показувати налагодження слідів (я малюю діаграми послідовності повідомлень з моїх та гістограм використання пам'яті. Це також дає вам підставу для порівняння, якщо щось піде не так у майбутнє (зберігайте всі журнали, чи проходять вони, чи не вдається, і обов'язково включіть номер складання у файл журналу)).


1

Мої два центи про рівні FATALта TRACEжурнал помилок.

ERROR це коли трапляються якісь ПОМИЛКИ (винятки).

FATAL насправді ДВОЙНА НЕПРАВИЛЬНА: коли винятки виникають під час обробки виключення.

Це легко зрозуміти для веб-сервісу.

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

TRACEце коли ми можемо простежити вхід / вихід функції. Йдеться не про ведення журналів, оскільки це повідомлення може генеруватися деяким налагоджувачем, а ваш код взагалі не закликає log. Тож повідомлення, які не належать до вашої програми, позначаються як TRACEрівень. Наприклад, запустіть свою програму за допомогоюstrace

Так зазвичай у вашій програмі ви робите DEBUG, INFOі WARNведення журналу. І лише якщо ви пишете якусь веб-службу / рамку, яку будете використовувати FATAL. А під час налагодження програми ви отримаєте TRACEвхід із цього типу програмного забезпечення.


0

Я пропоную використовувати лише три рівні

  1. Фатальна - Що б порушило додаток.
  2. Інформація - Інформація
  3. Налагодження - Менш важлива інформація
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.