이 글에서는 Winston 라이브러리를 사용하여 Node.js에서 간단한 로깅 기능을 구축하는 방법을 소개하겠습니다.
Winston은 강력하고 유연한 Node.js
오픈 소스 로깅 라이브러리 중 하나입니다. 이론적으로 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
다음 기능을 제공합니다: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
를 초기화해야 합니다. 프로젝트에는 이미 logger.js
파일이 있으므로 여기에 또 다른 winstonLogger.js
를 생성하세요. 코드는 다음과 같습니다: 🎜rrreee🎜winston을 호출합니다.
라이브러리 >createLogger 함수를 사용하여 로거를 초기화합니다. transports
객체에서 파일 이름을 제공하여 로그를 파일에 저장할 수 있습니다. 기본적으로 로깅은 형식화되지 않고 로그 메시지와 수준이라는 두 개의 매개변수가 포함된 JSON 문자열로 인쇄됩니다. 🎜🎜 다음으로 이전 logger
를 수정하고 winston
로거를 추가하세요. 구체적인 수정 방법은 다음과 같습니다. 🎜rrreee🎜Execute 프로그램 후에는 해당 로그 파일이 루트 디렉터리 logs/server.log
🎜🎜🎜🎜로그 수준 변경, 로거
수정도 콘솔에서만 가능합니다. .error
모드에서 winston
사용: 🎜🎜🎜🎜 데이터베이스 연결 오류 정보를 기록합니다. 위 정보는 데모용입니다. 🎜winston
을 사용하면 winstonLogger.js
에서 여러 전송
을 설정할 수 있습니다. > 코드>의 createLogger
함수를 다음과 같이 변경합니다. 🎜rrreee🎜프로그램을 다시 실행하면 error.log
및 info.log
가 표시됩니다. > 파일, logger
에 info
가 설정되지 않았기 때문에 info.log
의 내용은 비어 있고 error의 내용은 .log
는 위와 동일합니다. 🎜winston
을 사용하면 실제로 각 모듈에 설정할 수 있는 여러 로거
를 설정할 수 있습니다. 프로젝트 로거 logger
를 생성합니다. 다음 코드는 사용자 로거 및 로그인 확인 로거를 생성합니다. 🎜rrreee🎜수정된 코드는 전역 로거 globalLogger
및 인증 로거 를 생성합니다. authLogger
, logger.js
에 대한 해당 수정 사항: 🎜rrreeewinstonLogger.js
파일을 업데이트합니다. 🎜rrreee🎜프로젝트를 실행하면 로그 파일을 볼 수 있습니다. 🎜🎜🎜🎜🎜이 시점에서 , 🎜Winston🎜의 기본 사용 가이드가 소개되었습니다. 이상으로 기본적으로 일일 프로젝트의 요구 사항을 충족할 수 있습니다. 🎜더 많은 프로그래밍 관련 지식을 보려면 프로그래밍 비디오를 방문하세요! !
위 내용은 Node.js+Winston 라이브러리가 간단한 로깅 기능을 구축하는 방법에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!