logologo
Початок
Посібник
Розробка
Плагіни
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
Початок
Посібник
Розробка
Плагіни
API
logologo

Швидкий старт

Огляд розробки плагінів
Написання першого плагіна
Структура каталогу проєкту

Серверна розробка

Огляд
Плагін (Plugin)
Колекції (таблиці даних)
Операції з базою даних (Database)
Керування джерелами даних (DataSourceManager)
Керування ресурсами (ResourceManager)
Контроль доступу (ACL)
Проміжне ПЗ (Middleware)
Кеш (Cache)
Подія (Event)
Контекст запиту (Context)
Скрипт оновлення (Migration)
Логи (Logger)
Інтернаціоналізація (I18n)
Командний рядок (Command)
Керування завданнями за розкладом (CronJobManager)
Тестування (Test)

Клієнтська розробка

Огляд
Плагін (Plugin)
Контекст (Context)
Маршрутизатор (Router)
Контроль доступу (ACL)
Керування джерелами даних (DataSourceManager)
Ресурс (Resource)
Запит (Request)
Стилі та теми (Styles & Themes)
Логи (Logger)
Інтернаціоналізація (I18n)
Тестування (Test)

Інше

Посібник з оновлення плагінів
Список мов
Керування залежностями
Збірка
Previous PageСтилі та теми (Styles & Themes)
Next PageІнтернаціоналізація (I18n)
Повідомлення про переклад ШІ

Ця документація була автоматично перекладена штучним інтелектом.

#Логер

NocoBase пропонує високопродуктивну систему логування, засновану на pino. У будь-якому місці, де доступний context, ви можете отримати екземпляр логера через ctx.logger для запису ключових журналів під час виконання плагіна або системи.

#Основне використання

// Запис критичних помилок (наприклад, збій ініціалізації)
ctx.logger.fatal('Ініціалізація застосунку не вдалася', { error });

// Запис загальних помилок (наприклад, помилки запиту API)
ctx.logger.error('Не вдалося завантажити дані', { status, message });

// Запис попереджень (наприклад, ризики продуктивності або незвичайні дії користувача)
ctx.logger.warn('Поточна форма містить незбережені зміни');

// Запис загальної інформації про роботу (наприклад, компонент завантажено)
ctx.logger.info('Компонент профілю користувача завантажено');

// Запис налагоджувальної інформації (наприклад, зміни стану)
ctx.logger.debug('Поточний стан користувача', { user });

// Запис детальної інформації для трасування (наприклад, процес рендерингу)
ctx.logger.trace('Компонент відрендерено', { component: 'UserProfile' });

Ці методи відповідають різним рівням логування (від найвищого до найнижчого):

РівеньМетодОпис
fatalctx.logger.fatal()Критичні помилки, що зазвичай призводять до завершення роботи програми
errorctx.logger.error()Журнали помилок, що вказують на збій запиту або операції
warnctx.logger.warn()Попереджувальна інформація, що сповіщає про потенційні ризики або неочікувані ситуації
infoctx.logger.info()Звичайна інформація про роботу
debugctx.logger.debug()Налагоджувальна інформація для середовища розробки
tracectx.logger.trace()Детальна інформація для трасування, зазвичай для глибокої діагностики

#Формат логів

Кожен вивід логу має структурований формат JSON і за замовчуванням містить такі поля:

ПолеТипОпис
levelnumberРівень логування
timenumberМітка часу (мілісекунди)
pidnumberID процесу
hostnamestringІм'я хоста
msgstringПовідомлення логу
ІншіobjectКористувацька контекстна інформація

Приклад виводу:

{
  "level": 30,
  "time": 1730540153064,
  "pid": 12765,
  "hostname": "nocobase.local",
  "msg": "HelloModel rendered",
  "a": "a"
}

#Прив'язка контексту

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

plugin.context.logger.info('Плагін ініціалізовано');
model.context.logger.error('Перевірка моделі не вдалася', { model: 'User' });

Приклад виводу (з контекстом):

{
  "level": 30,
  "msg": "Plugin initialized",
  "plugin": "plugin-audit-trail"
}

#Користувацький логер

Ви можете створювати власні екземпляри логера в плагінах, успадковуючи або розширюючи конфігурації за замовчуванням:

const logger = ctx.logger.child({ module: 'MyPlugin' });
logger.info('Підмодуль запущено');

Дочірні логери успадковують конфігурацію основного логера та автоматично додають контекст.

#Ієрархія рівнів логування

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

Назва рівняЗначенняНазва методуОпис
fatal60logger.fatal()Критичні помилки, що зазвичай призводять до неможливості продовження роботи програми
error50logger.error()Загальні помилки, що вказують на збій запиту або винятки в операціях
warn40logger.warn()Попереджувальна інформація, що сповіщає про потенційні ризики або неочікувані ситуації
info30logger.info()Загальна інформація, що фіксує стан системи або нормальні операції
debug20logger.debug()Налагоджувальна інформація для аналізу проблем на етапі розробки
trace10logger.trace()Детальна інформація для трасування, для глибокої діагностики
silent-Infinity(без відповідного методу)Вимкнути весь вивід логів

Pino виводить лише ті логи, рівень яких більший або дорівнює поточному налаштуванню level. Наприклад, якщо рівень логування встановлено на info, логи debug та trace будуть ігноруватися.

#Найкращі практики у розробці плагінів

  1. Використовуйте контекстний логер
    Використовуйте ctx.logger у контекстах плагінів, моделей або застосунків, щоб автоматично додавати інформацію про джерело.

  2. Розрізняйте рівні логування

    • Використовуйте error для запису бізнес-винятків
    • Використовуйте info для запису змін стану
    • Використовуйте debug для запису налагоджувальної інформації під час розробки
  3. Уникайте надмірного логування
    Особливо на рівнях debug та trace рекомендується вмикати їх лише в середовищах розробки.

  4. Використовуйте структуровані дані
    Передавайте об'єктні параметри замість об'єднання рядків, це допомагає в аналізі та фільтрації логів.

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