温馨提示×

golang日志乱码centos咋办

小樊
44
2026-09-09 03:56:40
栏目: 编程语言

CentOS 上 Golang 日志出现乱码,绝大多数情况是字符编码不一致导致的。下面按「最常见原因 → 解决办法」给你一套排查方案。


一、最常见原因:终端 / 系统不是 UTF-8

1️⃣ 查看当前编码

locale

如果看到类似:

LANG=
LC_ALL=

zh_CN.GBK

就很可能乱码。

✅ 解决:设置为 UTF-8

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

永久生效(推荐):

vim /etc/locale.conf

内容改为:

LANG=en_US.UTF-8

然后:

source /etc/locale.conf

二、Golang 程序本身输出编码问题

2️⃣ 日志里有中文,但终端乱码

Go 默认使用 UTF-8 输出,如果:

  • 终端是 GBK
  • 或日志文件用 GBK 打开

就会乱码。

✅ 解决方案

终端用 UTF-8(推荐)

  • xshell / finalshell / terminal 都设置为 UTF-8

日志文件用 UTF-8 打开

  • 不要用 Windows 记事本直接看
  • catlessvim

三、日志写入文件后乱码

3️⃣ 文件编码不是 UTF-8

file log.txt

如果是:

log.txt: ISO-8859 text

✅ 转换编码

iconv -f GBK -t UTF-8 log.txt > log_utf8.txt

四、Golang 代码中显式指定编码(高级)

如果你必须输出 GBK(比如老系统):

import "github.com/axgle/mahonia"

enc := mahonia.NewEncoder("gbk")
fmt.Println(enc.ConvertString("中文日志"))

⚠️ 一般不推荐,尽量统一 UTF-8。


五、常见坑总结 ✅

问题 解决
xshell 中文乱码 终端编码改 UTF-8
日志文件乱码 cat / vim 看,别用记事本
Docker 里乱码 Docker 里也要设 LANG
systemd 启动乱码 service 里加 Environment=LANG=en_US.UTF-8

六、快速自检清单 ✅

locale
echo "中文测试"
go run main.go
cat log.txt

如果你愿意,可以:

  • 乱码截图
  • 或贴 日志代码(logrus / zap / fmt)
  • 或说明是 终端 / 文件 / Docker 环境

我可以直接帮你定位到具体哪一步。

0