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

如何让Bunyan CLI工具输出的日志文件与控制台格式一致(非JSON)

让Bunyan日志文件与控制台格式一致的解决方法

我来帮你搞定这个问题!目前你遇到的情况是,node . | bunyan会把服务器输出的JSON日志格式化成易读的文本显示在控制台,但如果直接把服务器输出重定向到文件,得到的还是原始JSON。要让server.log和控制台格式一致,有两种常用方法:

方法一:命令行快速实现(无需修改代码)

利用tee命令将Bunyan格式化后的输出同时发送到控制台和文件,这样两者的格式就完全一致了。如果需要文件里不含控制台的颜色控制代码,可以加上--no-color参数:

# 带颜色输出(控制台有颜色,文件也会包含颜色代码)
node . | bunyan | tee server.log

# 无颜色输出(文件内容更干净,适合后续分析)
node . | bunyan --no-color | tee server.log

原理说明:

原来的node .输出的是原始JSON日志,bunyan工具会把这些JSON解析并格式化成你看到的[2018-05-14T12:28:01.465Z] INFO: sampleApplication/12840: hi格式,tee命令会把这个格式化后的内容同时输出到控制台和写入server.log文件。

方法二:代码中配置Logger(长期维护更灵活)

如果希望在代码层面直接控制日志输出格式,不需要每次用命令行处理,可以修改Bunyan的Logger配置,添加两个格式化后的输出流:一个指向控制台,一个指向文件。

首先需要安装bunyan-prettystream(一个常用的Bunyan格式化流工具):

npm install bunyan-prettystream --save

然后修改你的日志初始化代码:

const bunyan = require('bunyan');
const PrettyStream = require('bunyan-prettystream');
const fs = require('fs');

// 配置控制台格式化流
const consoleStream = new PrettyStream();
consoleStream.pipe(process.stdout);

// 配置文件格式化流
const fileStream = new PrettyStream();
const logFile = fs.createWriteStream('server.log', { flags: 'a' }); // 'a'表示追加写入
fileStream.pipe(logFile);

// 创建Logger实例
const logger = bunyan.createLogger({
  name: 'sampleApplication',
  streams: [
    {
      level: 'info', // 日志级别
      stream: consoleStream
    },
    {
      level: 'info',
      stream: fileStream
    }
  ]
});

// 测试日志输出
logger.info('hi');

这样启动服务器时直接运行node .,控制台和server.log就都会输出格式化后的文本日志了。

内容的提问来源于stack exchange,提问作者Rishi Mahendru

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:37:48