如何轮换使用 pino-multi-stream 生成的日志文件?

Posted

技术标签:

【中文标题】如何轮换使用 pino-multi-stream 生成的日志文件?【英文标题】:How to rotate log files that generate with pino-multi-stream? 【发布时间】:2020-12-30 21:14:48 【问题描述】:

我在我的 node.js 项目中使用 pino-multi-stream npm 包,如下所示:

const fs = require('fs');
const pino = require('pino');
const multistream = require('pino-multi-stream').multistream;
const path = require('path');

const logDirectory = path.join(__dirname, '..', 'logs');
const streams = [
   stream: fs.createWriteStream(`$logDirectory/info.log`) ,
   level: 'info', stream: fs.createWriteStream(`$logDirectory/info.log`) ,
   level: 'debug', stream: fs.createWriteStream(`$logDirectory/debug.log`) ,
   level: 'warn', stream: fs.createWriteStream(`$logDirectory/warn.log`) ,
   level: 'error', stream: fs.createWriteStream(`$logDirectory/error.log`) ,
   level: 'fatal', stream: fs.createWriteStream(`$logDirectory/fatal.log`) 
];

const logger = pino( level: 'debug' , multistream(streams));
export  pino, logger ;

并使用像这样的记录器:

logger.info(`Ready on localhost:$port`);
logger.error('error message');
logger.warn('warning message');
...

现在我的项目中的日志目录中有多个日志文件。

我的问题是:

如何旋转这些文件(例如“每日”旋转,使用 npm 包,如“file-stream-rotator”)?

【问题讨论】:

【参考方案1】:

只需将 file-stream-rotator 获取的流传递给 pino-multi-stream。

 level: 'info', stream: fs.createWriteStream(`$logDirectory/info.log`) ,

 level: 'info', stream: require('file-stream-rotator').getStream(filename:`$logDirectory/info.log`, frequency:"daily") ,

【讨论】:

以上是关于如何轮换使用 pino-multi-stream 生成的日志文件?的主要内容,如果未能解决你的问题,请参考以下文章