使用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()会自动适配终端的编码格式,因此能正常显示。可以通过以下方式修复:
- 在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;
- 检查终端编码设置
如果是Windows系统的CMD终端,可能需要手动切换到UTF-8编码,执行命令:
chcp 65001
现代终端(如Windows Terminal、iTerm2、Linux终端)默认已使用UTF-8,通常无需额外设置。
内容的提问来源于stack exchange,提问作者Rusiru fernando
相关产品推荐
相关产品推荐

