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

使用Pino-pretty时logger系列方法无法在终端正常渲染Emoji问题

Express + Pino-pretty 表情符号显示乱码问题解决

在Node.js项目中使用Express框架搭配Pino-pretty日志工具时,遇到以下问题:console.log()可以在终端正常渲染Emoji,但调用logger.info()、logger.warn()等日志方法时,Emoji无法正常显示,例如预期的🚀显示为乱码≡ƒÜÇ。

相关代码示例

import express from "express";
import cors from "cors";
import logger from "./utils/logger";
import "dotenv/config";

const app = express();
const PORT = process.env.PORT || "8090";

app.use(cors());
app.use(express.json({ 
    limit: "20mb" 
}));

app.get("/", (req, res, next) => {
  res.send("<h2> 📚Library Management System API</h2>");
  next();
});

app.listen(PORT, () => {
    console.log(`🚀Listening on PORT ${PORT}`);
    logger.info(`🚀Listening on PORT ${PORT} `);

    logger.info("This is testing");
    logger.error("This is error");
    logger.warn("This is warning");
});

终端输出情况

[nodemon] restarting due to changes... 
[nodemon] starting babel-node src/app.js
🚀Listening on PORT 8090 
[24-02-2023 14:37:41] INFO: **🚀**Listening on PORT 8090  
[24-02-2023 14:37:41] INFO: This is testing 
[24-02-2023 14:37:41] ERROR: This is error 
[24-02-2023 14:37:41] WARN: This is warning

解决方法

问题根源在于Pino-pretty默认未强制使用UTF-8编码,导致多字节的Emoji字符被错误解析,而console.log()会自动适配终端的编码格式,因此能正常显示。可以通过以下方式修复:

  1. 在Logger初始化时指定UTF-8编码
    修改你的./utils/logger.js文件,在Pino配置中为pino-pretty添加charset: 'utf-8'选项:
import pino from 'pino';

const logger = pino({
  transport: {
    target: 'pino-pretty',
    options: {
      colorize: true, // 保留原有的颜色配置(如果有)
      charset: 'utf-8' // 关键配置,强制使用UTF-8编码输出
    }
  }
});

export default logger;
  1. 检查终端编码设置
    如果是Windows系统的CMD终端,可能需要手动切换到UTF-8编码,执行命令:
chcp 65001

现代终端(如Windows Terminal、iTerm2、Linux终端)默认已使用UTF-8,通常无需额外设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 00:21:26