如何轮换使用 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 生成的日志文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何每天轮换日志,仅使用当天的数据?

除第一天外,如何使用 Winston 每天轮换日志

如何实现刷新令牌轮换?

加密密钥轮换究竟是如何工作的?

如何创建轮换交易信息视图 [关闭]

如何从 C# 代码轮换 Azure 存储帐户访问密钥?