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

如何配置pino-pretty使日志特殊字符按字面量输出?

解决Pino + pino-pretty特殊字符转义显示问题

问题原因

Pino序列化日志对象时,会自动把字符串里的\n、\t这类特殊字符转义成JSON兼容的\\n、\\t;而pino-pretty默认保留这种转义格式,所以你看到的是转义序列而非实际的换行和空格。你之前在日志前做的字符串替换无效,是因为Pino序列化时又把转义字符重新加回去了。

解决方案

通过pino-pretty的formatters配置,自定义日志字段的格式化逻辑,在pino-pretty处理阶段直接解析转义字符:

const pinoLogger = pino({
    name: logger,
    level: LogLevel.DEBUG,
    transport: {
        target: 'pino-pretty',
        options: {
            destination: 1,
            colorize: true,
            translationTime: "SYS:yyyy-mm-dd'T'HH:MM:ss.l",
            formatters: {
                log: (logObj) => {
                    // 针对目标字段(比如value)解析转义字符
                    if (logObj.value) {
                        // 把\t替换为4个空格,\\n替换为实际换行
                        logObj.value = logObj.value.replace(/\\t/g, '    ')
                                                  .replace(/\\n/g, '\n');
                    }
                    return logObj;
                }
            }
        }
    }
});

补充说明

  • 若需要处理多个字段,只需在log格式化函数中添加对应字段的处理逻辑即可。
  • 确保你的pino-pretty版本为v10及以上,旧版本可能不支持formatters.log配置项。
  • 不建议全局关闭Pino的转义功能(如设置safe: false),这会导致日志输出不符合JSON规范,在不使用pino-pretty时出现异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:33:30