logologo
Démarrer
Manuel
Développement
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
Démarrer
Manuel
Développement
Plugins
API
logologo

Démarrage rapide

Aperçu du développement de plugins
Créer son premier plugin
Structure des répertoires du projet

Développement côté serveur

Aperçu
Plugin
Collections (Tables de données)
Database (Opérations)
DataSourceManager (Gestion des sources de données)
ResourceManager (Gestion des ressources)
ACL (Contrôle des permissions)
Middleware
Cache
Event (Événement)
Context (Contexte de la requête)
Migration (Script de mise à niveau)
Logger (Journal)
I18n (Internationalisation)
Command (Ligne de commande)
CronJobManager (Gestion des tâches planifiées)
Test

Développement côté client

Aperçu
Plugin
Context (Contexte)
Router (Routeur)
ACL (Contrôle des permissions)
DataSourceManager (Gestion des sources de données)
Resource (Ressource)
Request (Requête)
Styles & Themes
Logger (Journal)
I18n (Internationalisation)
Test

Autres

Guide de mise à niveau des plugins
Liste des langues
Gestion des dépendances
Build
Previous PageMigration (Script de mise à niveau)
Next PageI18n (Internationalisation)
Avis de traduction IA

Cette documentation a été traduite automatiquement par IA.

#Logger

La journalisation NocoBase est basée sur Winston. Par défaut, NocoBase catégorise les journaux en journaux de requêtes API, journaux d'exécution système et journaux d'exécution SQL. Les journaux de requêtes API et d'exécution SQL sont générés en interne par l'application. Les développeurs de plugins n'ont généralement besoin d'enregistrer que les journaux d'exécution système liés à leurs plugins.

Ce document explique comment créer et enregistrer des journaux lors du développement de plugins.

#Méthodes d'enregistrement par défaut

NocoBase met à votre disposition des méthodes pour enregistrer les journaux d'exécution système. Ces journaux sont formatés selon des champs prédéfinis et sont écrits dans des fichiers spécifiques.

// Méthode d'enregistrement par défaut
app.log.info("message");

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

// Utilisation dans les plugins
class CustomPlugin extends Plugin {
  async load() {
    this.log.info("message");
  }
}

Toutes les méthodes ci-dessus suivent l'utilisation suivante :

Le premier paramètre est le message du journal. Le second est un objet metadata facultatif, qui peut contenir n'importe quelle paire clé-valeur. Les champs module, submodule et method seront extraits comme des champs distincts, tandis que les autres champs seront regroupés dans le champ 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();

#Enregistrer dans d'autres fichiers

Si vous souhaitez utiliser la méthode d'enregistrement par défaut du système, mais que vous ne voulez pas que les journaux soient écrits dans le fichier par défaut, vous pouvez créer une instance de logger système personnalisée à l'aide de createSystemLogger.

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

const logger = createSystemLogger({
  dirname: '/pathto/',
  filename: 'xxx',
  seperateError: true, // Indique si les journaux de niveau `error` doivent être enregistrés séparément dans 'xxx_error.log'.
});

#Logger personnalisé

Si vous préférez utiliser les méthodes natives de Winston plutôt que celles fournies par le système, vous pouvez créer des journaux en utilisant les méthodes suivantes.

#createLogger

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

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

L'objet options étend les winston.LoggerOptions originales.

  • transports - Vous pouvez utiliser 'console' | 'file' | 'dailyRotateFile' pour appliquer les méthodes de sortie prédéfinies.
  • format - Vous pouvez utiliser 'logfmt' | 'json' | 'delimiter' pour appliquer les formats d'enregistrement prédéfinis.

#app.createLogger

Dans les scénarios multi-applications, il est parfois utile de personnaliser les répertoires et fichiers de sortie. Vous pouvez alors enregistrer les journaux dans un répertoire portant le nom de l'application courante.

app.createLogger({
  dirname: '',
  filename: 'custom', // Enregistre dans /storage/logs/main/custom.log
});

#plugin.createLogger

Le cas d'utilisation et la méthode sont identiques à ceux de app.createLogger.

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