温馨提示×

debian js日志乱码如何修

小樊
37
2026-09-07 06:40:30
栏目: 编程语言

在 Debian 上 JS 日志出现乱码,通常是字符编码不一致导致的(一般是 UTF-8 和 GBK/Latin1 混用)。下面按常见场景逐步排查和修复。


一、先确认日志乱码的本质

1️⃣ 查看当前系统编码

locale

正常应为:

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

如果不是 UTF-8,先修系统编码。


二、修复 Debian 系统编码(最常见原因)

2️⃣ 生成 UTF-8 语言环境

sudo apt update
sudo apt install -y locales
sudo locale-gen en_US.UTF-8
sudo update-locale LANG=en_US.UTF-8

重新登录或重启:

reboot

三、Node.js / JS 程序日志乱码

3️⃣ Node.js 默认编码问题

Node.js 默认是 UTF-8,但如果:

  • 日志是从 文件读取
  • 子进程输出
  • 第三方库写日志

可能用了其他编码。

显式指定 UTF-8

fs.readFile('log.txt', 'utf8', (err, data) => {
  console.log(data);
});

4️⃣ 启动 Node 时强制 UTF-8

export LANG=en_US.UTF-8
node app.js

或:

LANG=en_US.UTF-8 node app.js

四、PM2 / 后台进程乱码(很常见)

5️⃣ PM2 日志乱码

PM2 默认不读 shell 的 locale。

✅ 解决方式:

pm2 delete all
LANG=en_US.UTF-8 pm2 start app.js

或者:

pm2 start app.js --env production

并在 ecosystem.config.js 中:

env: {
  LANG: "en_US.UTF-8"
}

五、Docker 中 JS 日志乱码

6️⃣ Docker 容器编码问题

Dockerfile 加:

ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8

六、日志文件本身是 GBK

7️⃣ 文件是 GBK,但用 UTF-8 看

iconv 转码:

iconv -f gbk -t utf8 log.txt > log_utf8.txt

Node 中:

const iconv = require('iconv-lite');
const buf = fs.readFileSync('log.txt');
console.log(iconv.decode(buf, 'gbk'));

七、终端显示乱码(不是日志问题)

8️⃣ 终端编码检查

  • SecureCRT / Xshell:设置为 UTF-8
  • VS Code 终端:UTF-8
  • tmux:
export LANG=en_US.UTF-8

八、快速自检清单 ✅

  • [ ] locale 是 UTF-8
  • [ ] Node 启动时有 LANG=en_US.UTF-8
  • [ ] 日志文件本身是 UTF-8
  • [ ] 终端编码是 UTF-8
  • [ ] Docker / PM2 显式指定编码

如果你愿意,可以告诉我:

  • 用的什么(Node / PM2 / Docker / Nginx)
  • 日志怎么产生的(console / winston / 文件)
  • 乱码是中文还是符号

我可以直接给你对应修复命令

0