记录到 STDOUT 和带有 node/pino 的文件

Oli*_* D. 5 logging node.js pinojs

我正在分享这个,因为我努力让 pino 记录器写入 STDOUT 和日志文件:

const dest = new stream.PassThrough();
dest.pipe(process.stdout);
dest.pipe(fs.createWriteStream('/logs/file.log', { flags: 'a' }));
const logger = pino({ level: 'info' }, dest);
Run Code Online (Sandbox Code Playgroud)

由于这看起来非常低,我想知道这是否是正确的方法。

Or *_*cov 12

如果您使用 pino 7+,您可以使用以下命令:

const transport = pino.transport({
  targets: [
    {
      level: 'trace',
      target: 'pino/file',
      options: {
        destination: logPath,
      },
    },
    {
      level: 'trace',
      target: 'pino-pretty',
      options: {},
    },
  ],
});

export const log = pino(options, transport);
Run Code Online (Sandbox Code Playgroud)


wtw*_*twt 11

有点晚了,但pino-multi-stream可能就是你想要的。我在这里遵循了本节,它在 TypeScript 中适合我的目的。你可以尝试这样的事情:

const fs = require('fs');
const pinoms = require('pino-multi-stream')

const streams = [
  { stream: process.stdout },
  { stream: fs.createWriteStream('/logs/file.log', { flags: 'a' }) },
]

const logger = pino({ level: 'info' }, pinoms.multistream(streams));
Run Code Online (Sandbox Code Playgroud)

  • 从 2022 年 6 月 10 日起,“pino-multi-stream”现已弃用 (https://www.npmjs.com/package/pino-multi-stream),并且该存储库已存档 (https://github.com/pinojs /pino-多流)。Pino 7/8 支持多码流,建议使用原生支持 (8认同)