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

如何将Fastify日志格式化为logfmt格式

如何让Fastify输出logfmt格式日志

当然可以实现,Fastify的日志系统支持高度自定义,通过配置自定义的日志格式化逻辑就能输出logfmt格式的日志,以下是两种可行方案:

方案一:手动实现logfmt序列化

直接在Fastify的logger配置中编写格式化函数,将日志对象转换为logfmt格式的字符串:

const fastify = require('fastify')({
  logger: {
    // 自定义请求/响应的序列化规则,按需调整
    serializers: {
      req: (req) => ({
        method: req.method,
        url: req.url,
        hostname: req.hostname,
        remoteAddress: req.ip
      }),
      res: (res) => ({
        statusCode: res.statusCode
      })
    },
    formatters: {
      // 将日志级别转为键值对
      level: (label) => ({ level: label }),
      // 核心:把日志对象转为logfmt格式字符串
      log: (obj) => {
        return Object.entries(obj)
          .map(([key, value]) => {
            // 字符串类型的值添加引号,符合logfmt规范
            const formattedVal = typeof value === 'string' ? `"${value}"` : value;
            return `${key}=${formattedVal}`;
          })
          .join(' ');
      }
    }
  }
});

// 测试日志输出
fastify.get('/', async (req, res) => {
  req.log.info({ user: 'john_doe', action: 'dashboard_access' }, 'User accessed dashboard');
  return { status: 'ok' };
});

fastify.listen({ port: 3000 }, (err) => {
  if (err) {
    fastify.log.error(err);
    process.exit(1);
  }
});

方案二:使用logfmt库简化实现

如果不想手动处理格式细节,可以借助logfmt库来完成序列化:

  1. 先安装依赖:
npm install logfmt
  1. 配置Fastify的logger:
const logfmt = require('logfmt');
const fastify = require('fastify')({
  logger: {
    serializers: {
      req: (req) => ({
        method: req.method,
        url: req.url,
        remoteAddress: req.ip
      }),
      res: (res) => ({
        statusCode: res.statusCode
      })
    },
    formatters: {
      level: (label) => ({ level: label }),
      // 直接用logfmt库的stringify方法转换日志对象
      log: (obj) => logfmt.stringify(obj)
    }
  }
});

// 测试代码同方案一

关键说明

Fastify的logger.formatters.log函数负责将日志对象转换为最终输出的字符串,只要在这里实现logfmt格式的转换逻辑即可。serializers配置可以帮助你过滤掉请求/响应对象中的冗余字段,只保留业务需要的日志信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 18:42:11