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

如何结合Pino的ECS格式化器与TCP传输器处理日志?

解决Pino结合ECS格式化与TCP传输的问题

问题描述

我希望通过Pino处理日志,先使用ECS格式化器对日志进行格式化,再将其发送至TCP传输器,但不知道如何将这两个功能结合。在ECS格式化器文档中,显示初始化Pino时需将格式化器作为第一个参数传入:

const log = pino(ecsFormat())

而TCP传输器文档中则显示初始化Pino时需将传输器作为第一个参数传入:

const log = pino(transport)

这两个功能并非互斥,请问该如何先格式化日志再进行传输?

解决方案

你可以将ECS格式化配置与TCP传输器配置合并到同一个Pino配置对象中,具体步骤如下:

  1. 安装所需依赖:
npm install pino @elastic/ecs-pino-format pino-socket
  1. 编写代码结合两者功能:
const pino = require('pino')
const ecsFormat = require('@elastic/ecs-pino-format')

// 配置TCP传输器
const tcpTransport = pino.transport({
  target: 'pino-socket',
  options: {
    address: '你的TCP服务器地址', // 替换为实际地址
    port: 9999 // 替换为实际端口
  }
})

// 合并ECS格式化配置与传输器配置
const log = pino({
  ...ecsFormat(), // 展开ECS格式化的所有配置规则
  transport: tcpTransport // 指定日志传输器
})

// 测试输出
log.info('这是一条经过ECS格式化并通过TCP发送的日志')

原理说明

ecsFormat() 返回的是包含Pino格式化规则的配置对象,通过对象展开运算符(...)将其合并到Pino的主配置中,同时添加transport属性指定TCP传输器。这样Pino会先按照ECS标准格式化日志内容,再将格式化后的日志通过TCP传输器发送到目标地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:06:33