温馨提示×

debian nodejs日志编码怎么改

小樊
41
2026-09-10 05:00:12
栏目: 编程语言

在 Debian 上 Node.js 日志的“编码”问题,通常分三种情况,对应不同改法。下面按常见场景说明。


一、Node.js 进程本身的输出编码(stdout/stderr)

Node.js 默认使用 UTF-8,但终端/系统环境可能不同。

1. 查看当前编码

locale
echo $LANG

如果是:

LANG=C

就可能不是 UTF-8。

2. 修改系统 locale(推荐)

sudo dpkg-reconfigure locales

勾选:

en_US.UTF-8

zh_CN.UTF-8

然后:

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

写入环境(永久):

echo 'export LANG=en_US.UTF-8' >> ~/.bashrc

二、Node.js 日志文件编码(写入文件)

如果你在代码里写日志:

fs.writeFileSync('app.log', '中文')

1. 明确指定 UTF-8(默认就是)

fs.writeFileSync('app.log', '中文', 'utf8')

2. 使用流并指定编码

const fs = require('fs')
const stream = fs.createWriteStream('app.log', { encoding: 'utf8' })
stream.write('中文日志')

只要不指定 binary / latin1,一般就是 UTF-8


三、PM2 / systemd 启动 Node.js 日志乱码

情况 A:PM2

PM2 日志默认 UTF-8,但如果系统 locale 不对:

pm2 restart all --update-env

或设置:

export LANG=en_US.UTF-8
pm2 startup

查看日志:

pm2 logs

情况 B:systemd 服务

编辑 service 文件:

sudo systemctl edit your-node.service

加入:

[Service]
Environment=LANG=en_US.UTF-8
Environment=LC_ALL=en_US.UTF-8

然后:

sudo systemctl daemon-reload
sudo systemctl restart your-node

四、日志库(winston / pino)乱码

winston

const winston = require('winston')

const logger = winston.createLogger({
  transports: [
    new winston.transports.File({
      filename: 'app.log',
      options: { encoding: 'utf8' }
    })
  ]
})

pino

pino 默认 UTF-8,不要指定:

{ encoding: 'utf8' } // 默认就是这个

五、快速排查 checklist

✅ 系统 locale 是 UTF-8
✅ Node.js 写文件用 utf8
✅ PM2 / systemd 环境变量正确
✅ 日志查看工具支持 UTF-8(如 cat, less


如果你能告诉我:

  • 日志是 控制台 / 文件 / PM2 / systemd
  • 乱码 还是 想换编码(如 GBK)

我可以直接给你一份精确配置。

0