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 !
Winston est l'une des bibliothèques de journalisation open source Node.js
puissantes et flexibles. En théorie, Node.js
开源日志库之一,理论上, Winston 是一个可以记录所有信息的记录器。这是一个高度直观的工具,易于定制。可以通过更改几行代码来调整其背后的逻辑。它使对数据库或文件等持久存储位置的日志记录变得简单容易。【推荐学习:《nodejs 教程》】
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
也可以更改日志级别,修改 logger
,只在 console.error
方式下使用 winston
:
记录了数据库连接错误信息,上面的信息仅只是为了演示。
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
内容和上面的一样。
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.js
Winston
"]
Winston
Fournit les fonctionnalités suivantes :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, };
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
🎜🎜🎜🎜Vous pouvez également changer le niveau de journalisation, modifier le logger
, uniquement dans la console .error
Utilisez winston
dans le mode : 🎜🎜🎜🎜 enregistre les informations d'erreur de connexion à la base de données Les informations ci-dessus sont uniquement à titre de démonstration. 🎜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. 🎜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
: 🎜rrreeewinstonLogger.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!