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

Быстрый старт

Обзор разработки плагинов
Создание первого плагина
Структура каталогов проекта

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

Обзор
Плагин
Коллекции (таблицы данных)
Операции с базой данных
Управление источниками данных (DataSourceManager)
Управление ресурсами (ResourceManager)
Контроль доступа (ACL)
Промежуточное ПО (Middleware)
Кэш
Событие
Контекст запроса
Миграции
Логгер
Интернационализация (I18n)
Командная строка
Управление задачами Cron (CronJobManager)
Тестирование

Клиентская разработка

Обзор
Плагин
Контекст
Маршрутизатор
Контроль доступа (ACL)
Управление источниками данных (DataSourceManager)
Ресурс
Запрос
Стили и темы
Логгер
Интернационализация (I18n)
Тестирование

Прочее

Руководство по обновлению плагинов
Список языков
Управление зависимостями
Сборка
Previous PageМиграции
Next PageИнтернационализация (I18n)
Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

#Логгер

Журналирование в NocoBase основано на Winston. По умолчанию NocoBase разделяет логи на журналы запросов API, журналы работы системы и журналы выполнения SQL-запросов. Журналы запросов API и выполнения SQL-запросов генерируются внутри приложения. Разработчикам плагинов обычно требуется выводить только системные журналы, относящиеся к их плагинам.

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

#Методы вывода логов по умолчанию

NocoBase предоставляет методы для вывода системных журналов. Логи выводятся в соответствии с заданными полями и сохраняются в указанные файлы.

// Метод вывода по умолчанию
app.log.info("message");

// Использование в промежуточном ПО (middleware)
async function (ctx, next) {
  ctx.log.info("message");
}

// Использование в плагинах
class CustomPlugin extends Plugin {
  async load() {
    this.log.info("message");
  }
}

Все перечисленные выше методы используются следующим образом:

Первый параметр — это сообщение лога, а второй — необязательный объект метаданных. Он может содержать любые пары ключ-значение. При этом module, submodule и method будут извлечены как отдельные поля, а остальные поля будут помещены в поле meta.

app.log.info('message', {
  module: 'module',
  submodule: 'submodule',
  method: 'method',
  key1: 'value1',
  key2: 'value2',
});
// => level=info timestamp=2023-12-27 10:30:23 message=message module=module submodule=submodule method=method meta={"key1": "value1", "key2": "value2"}

app.log.debug();
app.log.warn();
app.log.error();

#Вывод в другие файлы

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

import { createSystemLogger } from '@nocobase/logger';

const logger = createSystemLogger({
  dirname: '/pathto/',
  filename: 'xxx',
  seperateError: true, // Выводить ли логи уровня error отдельно в файл 'xxx_error.log'
});

#Пользовательский логгер

Если вы предпочитаете использовать нативные методы Winston вместо системных, вы можете создавать логи следующими способами.

#createLogger

import { createLogger } from '@nocobase/logger';

const logger = createLogger({
  // options
});

Объект options расширяет оригинальный winston.LoggerOptions.

  • transports — Используйте 'console' | 'file' | 'dailyRotateFile', чтобы применить предустановленные методы вывода.
  • format — Используйте 'logfmt' | 'json' | 'delimiter', чтобы применить предустановленные форматы вывода.

#app.createLogger

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

app.createLogger({
  dirname: '',
  filename: 'custom', // Вывод в /storage/logs/main/custom.log
});

#plugin.createLogger

Сценарий использования и метод аналогичны app.createLogger.

class CustomPlugin extends Plugin {
  async load() {
    const logger = this.createLogger({
      // Вывод в /storage/logs/main/custom-plugin/YYYY-MM-DD.log
      dirname: 'custom-plugin',
      filename: '%DATE%.log',
      transports: ['dailyRotateFile'],
    });
  }
}