Maison >interface Web >js tutoriel >Une brève analyse de la façon dont la bibliothèque Node.js+Winston crée une fonction de journalisation simple

Une brève analyse de la façon dont la bibliothèque Node.js+Winston crée une fonction de journalisation simple

青灯夜游
青灯夜游avant
2021-10-20 10:01:211746parcourir

Cet article vous présentera comment utiliser la bibliothèque Winston pour créer une fonction de journalisation simple dans Node.js J'espère que cela vous sera utile !

Une brève analyse de la façon dont la bibliothèque Node.js+Winston crée une fonction de journalisation simple

Winston est l'une des bibliothèques de journalisation open source Node.js puissantes et flexibles. En théorie, Node.js 开源日志库之一,理论上, Winston  是一个可以记录所有信息的记录器。这是一个高度直观的工具,易于定制。可以通过更改几行代码来调整其背后的逻辑。它使对数据库或文件等持久存储位置的日志记录变得简单容易。【推荐学习:《nodejs 教程》】

Winston 提供以下功能:

  • 集中控制日志记录的方式和时间:在一个地方更改代码即可
  • 控制日志发送的位置:将日志同步保存到多个目的地(如Elasticsearch、MongoDB、Postgres等)。
  • 自定义日志格式:带有时间戳、颜色日志级别、JSON格式等前缀。

winston实践

实践代码将在项目 pretender-service 中增加日志功能,安装依赖:

npm install winston --save

接下来需要初始化 logger ,由于项目中已经存在一个 logger.js 文件,这里再创建一个 winstonLogger.js ,代码如下:

const { createLogger, format, transports } = require("winston");

module.exports = createLogger({
    transports: [
        new transports.File({
            filename: "logs/server.log",
            level: "info",
            format: format.combine(
                format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }),
                format.align(),
                format.printf(
                    (info) =>
                        `${info.level}: ${[info.timestamp]}: ${info.message}`
                )
            ),
        }),
    ],
});

通过调用 winston 库中的 createLogger 函数来初始化记录器。在 transports 对象中,可以提供一个文件名将日志存储在文件中。默认情况下,日志记录未格式化并打印为带有两个参数的 JSON 字符串,日志消息和等级。

下面对之前的 logger 进行修改,将winston 日志记录器加入进去,具体修改方式参阅代码,下面给出其使用方法:

const winlogger = require("./winstonLogger");
winlogger.info("日志内容");

执行程序后可以会在根目录生成相应的日志文件 logs/server.log

Une brève analyse de la façon dont la bibliothèque Node.js+Winston crée une fonction de journalisation simple

也可以更改日志级别,修改 logger ,只在 console.error 方式下使用 winston

Une brève analyse de la façon dont la bibliothèque Node.js+Winston crée une fonction de journalisation simple

记录了数据库连接错误信息,上面的信息仅只是为了演示。

多 transports

winston 允许设置多种 transport ,在 winstonLogger.js  中更改 createLogger 函数如下:

const { createLogger, format, transports } = require("winston");

module.exports = createLogger({
    format: format.combine(
        format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }),
        format.align(),
        format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`)
    ),
    transports: [
        new transports.File({
            filename: "logs/info.log",
            level: "info",
            format: format.combine(
                format.printf((i) =>
                    i.level === "info"
                        ? `${i.level}: ${i.timestamp} ${i.message}`
                        : ""
                )
            ),
        }),
        new transports.File({
            filename: "logs/error.log",
            level: "error",
        }),
    ],
});

再次执行程序,将会看到 error.log info.log 文件,由于在 logger 中未设置 info ,因此 info.log 的内容为空,error.log 内容和上面的一样。

多 loggers

winston 允许设置多个 logger ,在实际项目中可以为每个模块创建一个记录器 logger , 如下代码,创建一个用户日志记录器和登录验证记录器:

const { createLogger, format, transports } = require("winston");

const customFormat = format.combine(
    format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }),
    format.align(),
    format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`)
);

const globalLogger = createLogger({
    format: customFormat,
    transports: [
        new transports.File({
            filename: "logs/info.log",
            level: "info",
            format: format.combine(
                format.printf((i) =>
                    i.level === "info"
                        ? `${i.level}: ${i.timestamp} ${i.message}`
                        : ""
                )
            ),
        }),
        new transports.File({
            filename: "logs/error.log",
            level: "error",
        }),
    ],
});

const authLogger = createLogger({
    transports: [
        new transports.File({
            filename: "logs/authLog.log",
            format: customFormat,
        }),
    ],
});

module.exports = {
    globalLogger: globalLogger,
    authLogger: authLogger,
};

修改后代码创建了一个全局记录器 globalLogger 和一个鉴权记录器 authLogger ,对应修改 logger.js

const { globalLogger } = require("./winstonLogger");
globalLogger.error(message);

每日滚动日志文件

正如前面介绍的最佳实践中提到的,按照特定的条件对日志文件进行分割,通常按照日期、大小进行分割,并设置保存的日志天数。为实现这些需求,要有一个安装一个  Winston  相关的依赖库。

npm install winston-daily-rotate-file --save

安装完成后使用以下代码更新到 winstonLogger.jsWinston

est un enregistreur qui peut enregistrer toutes les informations. Il s’agit d’un outil très intuitif et facile à personnaliser. La logique derrière cela peut être ajustée en modifiant quelques lignes de code. Il rend la journalisation vers des emplacements de stockage persistants tels que des bases de données ou des fichiers simple et facile. [Apprentissage recommandé : "nodejs tutoriel

"]

Une brève analyse de la façon dont la bibliothèque Node.js+Winston crée une fonction de journalisation simpleWinston

Fournit les fonctionnalités suivantes :

  • Contrôle centralisé de la manière et du moment où la journalisation est effectuée : modifiez le code en un seul endroit
  • Contrôlez où les journaux sont envoyés : enregistrez les journaux de manière synchrone vers plusieurs destinations (telles que Elasticsearch, MongoDB, Postgres, etc.).
  • Format de journal personnalisé : avec des préfixes tels que l'horodatage, le niveau de journal des couleurs, le format JSON, etc.

winston practices

Le code de pratique sera dans le projet pretender-service Ajouter une fonction de journalisation, installer les dépendances :
const { createLogger, format, transports } = require("winston");
require("winston-daily-rotate-file");

const customFormat = format.combine(
    format.timestamp({ format: "MMM-DD-YYYY HH:mm:ss" }),
    format.align(),
    format.printf((i) => `${i.level}: ${[i.timestamp]}: ${i.message}`)
);
const defaultOptions = {
    format: customFormat,
    datePattern: "YYYY-MM-DD",
    zippedArchive: true,
    maxSize: "20m",
    maxFiles: "14d",
};
const globalLogger = createLogger({
    format: customFormat,
    transports: [
        new transports.DailyRotateFile({
            filename: "logs/info-%DATE%.log",
            level: "info",
            ...defaultOptions,
        }),
        new transports.DailyRotateFile({
            filename: "logs/error-%DATE%.log",
            level: "error",
            ...defaultOptions,
        }),
    ],
});

const authLogger = createLogger({
    transports: [
        new transports.DailyRotateFile({
            filename: "logs/authLog-%DATE%.log",
            ...defaultOptions,
        }),
    ],
});

module.exports = {
    globalLogger: globalLogger,
    authLogger: authLogger,
};
🎜 Ensuite, vous devez initialiser logger, puisque le projet existe déjà Il y a un fichier logger.js Ici, créez un autre winstonLogger.js Le code est le suivant : 🎜rrreee🎜En appelant le winston. fonction bibliothèque >createLogger pour initialiser le logger. Dans l'objet transports, vous pouvez fournir un nom de fichier pour stocker les journaux dans un fichier. Par défaut, la journalisation n'est pas formatée et est imprimée sous forme de chaîne JSON avec deux paramètres, le message du journal et le niveau. 🎜🎜 Ensuite, modifiez le logger précédent et ajoutez le logger winston. Veuillez vous référer au code pour la méthode de modification spécifique. Voici comment l'utiliser : 🎜rrreee🎜Exécuter. Après le programme, le fichier journal correspondant peut être généré dans le répertoire racine logs/server.log🎜🎜Une brève analyse de la façon dont la bibliothèque Node.js+Winston crée une fonction de journalisation simple🎜🎜Vous pouvez également changer le niveau de journalisation, modifier le logger, uniquement dans la console .error Utilisez winston dans le mode : 🎜🎜Une brève analyse de la façon dont la bibliothèque Node.js+Winston crée une fonction de journalisation simple🎜🎜 enregistre les informations d'erreur de connexion à la base de données Les informations ci-dessus sont uniquement à titre de démonstration. 🎜

Transports multiples

🎜winston permet de définir plusieurs transport, dans winstonLogger.js Changez la fonction createLogger dans le code> comme suit : 🎜rrreee🎜Exécutez à nouveau le programme, vous verrez le error.log et le info.log fichiers, car info n'est pas défini dans logger, donc le contenu de info.log est vide et le contenu de error .log est le même que ci-dessus Le même. 🎜

Enregistreurs multiples

🎜winston permet de configurer plusieurs enregistreurs, qui peuvent être définis pour chaque module en temps réel. projets Créez un enregistreur logger. Le code suivant crée un enregistreur d'utilisateur et un enregistreur de vérification de connexion : 🎜rrreee🎜Le code modifié crée un enregistreur global globalLogger et un enregistreur d'authentification . authLogger, modifications correspondantes à logger.js : 🎜rrreee

Fichier journal évolutif quotidien

🎜 Comme mentionné dans les bonnes pratiques introduites Plus tôt, divisez les fichiers journaux en fonction de conditions spécifiques, généralement par date, taille, et définissez le nombre de jours de sauvegarde des journaux. Afin de répondre à ces exigences, il est nécessaire d'installer une bibliothèque de dépendances associée à 🎜Winston🎜. 🎜rrreee🎜Une fois l'installation terminée, utilisez le code suivant pour mettre à jour le fichier winstonLogger.js : 🎜rrreee🎜Exécutez le projet et vous pourrez voir le fichier journal : 🎜🎜🎜🎜🎜À ce stade , le guide d'utilisation de base de 🎜Winston🎜 est introduit. Voilà, ce qui précède peut essentiellement répondre aux besoins des projets quotidiens. 🎜

Pour plus de connaissances sur la programmation, veuillez visiter : Vidéos de programmation ! !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer