Node.js / Pino.js:如何在单独的线程中轮换日志

Now*_*weh 5 javascript logging node.js pinojs

我正在尝试使用 pino 登录到我的节点应用程序服务器,并且我确实有一些大型日志出现,因此每天轮换文件会更实用。

所以我用了pino.multistream()require('file-stream-rotator')

我的代码可以工作,但出于性能原因,我不想在主线程中使用流。

根据文档,我应该使用pino.transport()

[ pino.multistream()] 与此不同,pino.transport()因为所有流都将在主线程(即创建 pino 实例的线程)内执行。 https://github.com/pinojs/pino/releases?page=2

但是,我无法将pino.transport()和结合起来file-stream-rotator

我的代码不能完全工作 - >记录第一个条目,但不可导出,因为它会阻止脚本并出现错误

抛出新错误('工作人员已退出')

主文件

const pino = require('pino')

const transport = pino.transport({
  target: './custom-transport.js'
})

const logger = pino(transport)
logger.level = 'info'

logger.info('Pino: Start Service Logging...')

module.exports = {
  logger
}

Run Code Online (Sandbox Code Playgroud)

自定义-transport.js 文件

const { once } = require('events')
const fileStreamRotator = require('file-stream-rotator')

const customTransport = async () => {
  const stream = fileStreamRotator.getStream({ filename: 'myfolder/custom-logger.log', frequency: 'daily' })
  await once(stream, 'open')
  return stream
}

module.exports = customTransport
Run Code Online (Sandbox Code Playgroud)