You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在输出到控制台前获取Pino日志并存储到本地变量?

如何在Pino日志输出到控制台前将内容存入本地变量?

当然可以实现,不需要写入文件,通过自定义Pino的输出流就能捕获日志内容并存入本地变量,同时还能保留原有的控制台输出。

基础实现方案

直接创建一个自定义输出流,在日志被输出前解析并存储,同时转发到控制台:

import pino from 'pino';

// 用来存储日志的本地变量(数组形式,方便存多条日志)
const capturedLogs = [];

// 自定义输出流,实现write方法处理日志
const customStream = {
  write: (logLine) => {
    // Pino默认输出JSON格式的日志行,先解析成对象
    const logData = JSON.parse(logLine);
    // 将日志对象存入本地变量
    capturedLogs.push(logData);
    // 转发到控制台,保留原有输出
    console.log(logLine);
  }
};

// 创建logger实例,指定自定义流作为输出目标
const logger = pino({
  level: 'info'
}, customStream);

// 测试日志输出
logger.info("in function x");

// 查看捕获到的日志
console.log('已捕获的日志:', capturedLogs);

保留美化输出的方案

如果你需要保留prettyPrint的美化效果,可以结合pino-pretty来处理控制台输出:

import pino from 'pino';
import pretty from 'pino-pretty';

const capturedLogs = [];

// 创建美化输出的流
const prettyConsoleStream = pretty({
  colorize: true,
  translateTime: 'YYYY-MM-DD HH:mm:ss'
});

const customStream = {
  write: (logLine) => {
    const logData = JSON.parse(logLine);
    capturedLogs.push(logData);
    // 转发到美化流输出到控制台
    prettyConsoleStream.write(logLine);
  }
};

const logger = pino({ level: 'info' }, customStream);

logger.info("in function x");
console.log('已捕获的日志:', capturedLogs);

说明

  • 自定义流的write方法会接收Pino输出的每一行日志(默认是JSON字符串),你可以在这里完成解析、存储的操作。
  • 所有捕获的日志都存在内存中的capturedLogs变量里,随时可以访问或处理。
  • 这种方式完全不需要写入文件,所有操作都在内存中完成。

内容的提问来源于stack exchange,提问作者J.Doe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:40:02