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

如何将多文件中Pino的log.info内容写入统一文本文件?

实现Pino日志将所有log.info输出到指定文本文件

问题描述

当前使用Pino和Pino Pretty包,希望把项目中多个.ts文件里的所有log.info内容写入到一个通用文本文件,现有代码示例如下:

logger.ts

import pinoCaller from 'pino-caller'
import pino from 'pino'
const job_name="job123"
const pinoPretty = pino(
    {
      prettyPrint: {
        messageFormat: `{"job_name":${job_name}, "message":{msg}}`,        
      },
    })
export const log=pinoCaller(pinoPretty)

file1.ts

import {log} from './logger'
const calculatesum = (a:any,b:any)=>{
log.info('**********')
log.info('sum begins')
const sum=a+b;
log.info('sum is '+sum)
log.info('sum ends')
}

file2.ts

import {log} from './logger'
const calculateproduct = (a:any,b:any)=>{
log.info('product begins')
const product=a*b;
log.info('product is '+product)
log.info('product ends')
log.info('**********')
}

期望文本文件输出格式:

***************
sum begins
sum is x
sum ends
product begins
product is y
product ends
***************

可行实现方法

有两种直接的方式可以实现需求,以下是具体方案:

方法一:通过Pino文件流直接写入

修改logger.ts,创建文件写入流并调整日志格式,只保留消息内容:

import pinoCaller from 'pino-caller'
import pino from 'pino'
import fs from 'fs'
import path from 'path'

// 创建文件写入流,以追加模式写入,文件不存在则自动创建
const logFileStream = fs.createWriteStream(path.join(__dirname, 'app.log'), { flags: 'a' })

const logger = pino(
  {
    // 自定义格式,只输出log.info的原始消息内容
    formatters: {
      log(object) {
        return object.msg
      }
    },
    // 不需要时间戳的话可以禁用
    timestamp: false
  },
  // 指定日志输出到文件流
  logFileStream
)

export const log = pinoCaller(logger)

配置后,所有log.info的内容会直接追加到app.log文件中,无需额外处理格式。

方法二:结合Pino Pretty+命令行重定向

如果想保留Pino Pretty的格式化能力,同时将输出写入文件,可按以下步骤操作:

  1. 调整logger.ts的格式配置,只保留消息内容并关闭颜色输出:
import pinoCaller from 'pino-caller'
import pino from 'pino'
const job_name="job123"
const pinoPretty = pino(
    {
      prettyPrint: {
        messageFormat: '{msg}', // 只输出原始消息
        colorize: false // 关闭颜色渲染,避免文件中出现ANSI控制码
      },
    })
export const log=pinoCaller(pinoPretty)
  1. 启动项目时通过命令行将输出重定向到文件:
node dist/index.js > app.log 2>&1

2>&1表示同时将错误输出也写入文件,若只需要log.info的内容,可仅重定向标准输出。

补充:匹配期望的首尾标记

如果需要自动在日志文件开头和结尾添加***************,可以在项目入口文件中添加对应日志调用:

import { log } from './logger'
import { calculatesum } from './file1'
import { calculateproduct } from './file2'

// 日志开头标记
log.info('***************')

// 执行业务逻辑
calculatesum(1,2)
calculateproduct(3,4)

// 日志结尾标记
log.info('***************')

内容的提问来源于stack exchange,提问作者Pavan Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 14:40:49