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

Inicio rápido

Resumen de desarrollo de plugins
Escribir el primer plugin
Estructura de directorios del proyecto

Desarrollo del lado del servidor

Visión general
Plugin
Colecciones
Operaciones de base de datos
Gestión de fuentes de datos
Gestión de recursos
Control de permisos (ACL)
Middleware
Caché
Evento
Contexto de solicitud
Migración (Script de actualización)
Registro (Logger)
Internacionalización (I18n)
Línea de comandos (Command)
Gestión de tareas programadas
Pruebas

Desarrollo del lado del cliente

Visión general
Plugin
Contexto
Enrutador (Router)
Control de permisos (ACL)
Gestión de fuentes de datos
Recurso
Solicitud
Estilos y temas
Registro (Logger)
Internacionalización (I18n)
Pruebas

Otros

Guía de actualización de plugins
Lista de idiomas
Gestión de dependencias
Compilación
Previous PageMigración (Script de actualización)
Next PageInternacionalización (I18n)
Aviso de traducción por IA

Esta documentación ha sido traducida automáticamente por IA.

#Logger

El sistema de registro de NocoBase se basa en Winston. Por defecto, NocoBase clasifica los registros en: registros de solicitudes de API, registros de ejecución del sistema y registros de ejecución de SQL. Los registros de solicitudes de API y los registros de ejecución de SQL se imprimen internamente por la aplicación. Los desarrolladores de plugins, por lo general, solo necesitan imprimir los registros de ejecución del sistema relacionados con sus plugins.

Este documento describe cómo crear e imprimir registros al desarrollar un plugin.

#Métodos de Registro Predeterminados

NocoBase le ofrece métodos para imprimir los registros de ejecución del sistema. Estos registros se imprimen siguiendo campos definidos y se envían a archivos específicos.

// Método de registro predeterminado
app.log.info("message");

// Uso en un middleware
async function (ctx, next) {
  ctx.log.info("message");
}

// Uso en plugins
class CustomPlugin extends Plugin {
  async load() {
    this.log.info("message");
  }
}

Todos estos métodos se utilizan de la siguiente manera:

El primer parámetro es el mensaje del registro, y el segundo es un objeto de metadatos opcional que puede contener cualquier par clave-valor. Los campos module, submodule y method se extraerán como campos individuales, mientras que los campos restantes se agruparán en el campo 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();

#Salida a Otros Archivos

Si desea seguir utilizando los métodos de registro predeterminados del sistema, pero no quiere que se guarden en el archivo predeterminado, puede crear una instancia de logger de sistema personalizada usando createSystemLogger.

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

const logger = createSystemLogger({
  dirname: '/pathto/',
  filename: 'xxx',
  seperateError: true, // Indica si los registros de nivel 'error' deben guardarse por separado en 'xxx_error.log'
});

#Logger Personalizado

Si prefiere no usar los métodos de registro que ofrece el sistema y desea utilizar los métodos nativos de Winston, puede crear registros de las siguientes maneras.

#createLogger

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

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

Las options (opciones) extienden las winston.LoggerOptions originales.

  • transports - Puede usar 'console' | 'file' | 'dailyRotateFile' para aplicar los métodos de salida preestablecidos.
  • format - Puede usar 'logfmt' | 'json' | 'delimiter' para aplicar los formatos de impresión preestablecidos.

#app.createLogger

En escenarios con múltiples aplicaciones, a veces queremos personalizar los directorios y archivos de salida para que se guarden en un directorio con el nombre de la aplicación actual.

app.createLogger({
  dirname: '',
  filename: 'custom', // Se guardará en /storage/logs/main/custom.log
});

#plugin.createLogger

El caso de uso y la forma de emplearlo son los mismos que para app.createLogger.

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