Я працюю з критично важливими системами безпеки в режимі реального часу, і ведення журналів часто є єдиним способом ловити рідкісні помилки, які з’являються один раз блакитним місяцем кожного 53-го вівторка, коли це повний місяць, якщо ви спіймаєте мій дрейф. Цей вид робить вас нав’язливим щодо цього питання, тому я зараз вибачтесь, якщо почну пінитися у роті. Далі було написано журнали налагодження нативного коду, але більшість із них застосовується і до керованого світу ...
Використовуйте текстові файли журналу. Здається, це очевидно, але деякі люди намагаються генерувати бінарні файли журналів: це просто нерозумно, бо мені не потрібно шукати інструмент для читання, коли я поза полем. Плюс, якщо це текст, а налагодження є багатослівним, є хороший шанс, що інженер-польовий може прочитати файл і діагностувати проблему, не повертаючись до мене. Усі перемагають.
Я проектую системи, які здатні вести в собі майже все, але за замовчуванням не включаю все. Інформація про налагодження надсилається до прихованого діалогового вікна налагодження, який відмічає її часу та виводить у список списку (обмежений приблизно 500 рядками перед видаленням), і діалогове вікно дозволяє мені зупинити його, автоматично зберігати його у файлі журналу або перенаправляти на приєднаний налагоджувач. Ця переадресація дозволяє мені бачити вихід налагодження з декількох додатків, все чітко серіалізоване, що може бути рятувальником життя. Раніше я використовував числові рівні реєстрації (чим вище ви встановлюєте рівень, тим більше ви захоплюєте):
off
errors only
basic
detailed
everything
але це занадто негнучкість - оскільки ви працюєте з помилкою, набагато ефективніше можна зосередитись на вході на саме те, що вам потрібно, не перебираючи тонни детриту, і це може бути один конкретний вид транзакції чи операції що викликає помилку. Якщо це вимагає від вас все включити, ви просто ускладнюєте свою роботу. Вам потрібно щось більш дрібнозернисте.
Тож зараз я переходжу на журнал на основі системи прапорів. У всьому, що потрапляє в систему, є прапор із детальним описом того, що це за операція, і є набір прапорців, що дозволяють мені визначити, що відбувається в журналі. Зазвичай цей список виглядає приблизно так:
#define DEBUG_ERROR 1
#define DEBUG_BASIC 2
#define DEBUG_DETAIL 4
#define DEBUG_MSG_BASIC 8
#define DEBUG_MSG_POLL 16
#define DEBUG_MSG_STATUS 32
#define DEBUG_METRICS 64
#define DEBUG_EXCEPTION 128
#define DEBUG_STATE_CHANGE 256
#define DEBUG_DB_READ 512
#define DEBUG_DB_WRITE 1024
#define DEBUG_SQL_TEXT 2048
#define DEBUG_MSG_CONTENTS 4096
Ця система реєстрації постачається зі збіркою випусків , увімкнена та зберігає файл за замовчуванням. Занадто пізно дізнатися, що ви мали вести журнал ПІСЛЯ помилки, якщо ця помилка виникає лише в середньому один раз на півроку, і ви не можете її відтворити. Журнал, який працює лише з налагодженнями, є справедливим. рівнина. німий.
Програмне забезпечення зазвичай постачається з ERROR, BASIC, STATE_CHANGE та EXCEPTION, але це можна змінити в полі через діалогове вікно налагодження (або налаштування реєстру / ini / cfg, де ці речі зберігаються).
О та одне - моя система налагодження генерує один файл на день. Ваші вимоги можуть бути різними. Але переконайтеся, що ваш код налагодження починає кожен файл із датою, версією коду, який ви працюєте, і, якщо можливо, деяким маркером для ідентифікатора клієнта, місцезнаходження системи чи будь-якого іншого. Ви можете отримати міш-меш файлів журналів, що надходять з поля, і вам потрібен деякий запис про те, що звідки і з якої версії системи вони працювали, що є насправді в самих даних, і ви не можете довіряти клієнту / польовий інженер, щоб сказати, яку версію вони мають - вони можуть просто сказати вам, яку версію вони думають, що у них є. Гірше, вони можуть повідомити про версію exe, що знаходиться на диску, але стара версія все ще працює, оскільки забули перезавантажити після заміни. Попросіть ваш код сам сказати.
Нарешті, ви не хочете, щоб ваш код генерував власні проблеми, тому поставте функцію таймера, щоб очистити файли журналу через стільки днів або тижнів (просто перевірте різницю між часом і часом створення файлу). Це все в порядку для серверного додатка, який працює весь час, у програмі на стороні клієнта ви можете отримати, очищаючи будь-які старі дані під час запуску. Ми, як правило, очищаємось через 30 днів або більше в системі без частих відвідувань інженера, можливо, ви захочете залишити її довше. Очевидно, це залежить і від розміру ваших журнальних файлів.