温馨提示×

golang日志centos编码异常

小樊
39
2026-10-06 01:45:47
栏目: 编程语言

下面从常见原因 → 排查步骤 → 解决方案三个层面,帮你解决 Golang 在 CentOS 上日志中文/特殊字符乱码(编码异常) 的问题。


一、常见原因(CentOS + Golang 日志乱码)

1️⃣ 系统 Locale 不是 UTF-8

CentOS 默认有时是:

LANG=C
LC_ALL=C

这会导致:

  • 日志文件乱码
  • fmt.Println / log 输出乱码
  • 终端显示异常

2️⃣ 日志文件以非 UTF-8 编码写入

  • 用 os.WriteFile
  • 或第三方日志库(zap / logrus)
  • 实际内容是 UTF-8,但查看工具编码不对

3️⃣ 终端 / SSH 工具编码不对

如:

  • Xshell 默认 GBK
  • SecureCRT 非 UTF-8

4️⃣ Golang 代码未指定 UTF-8(极少见)

Go 源码默认 UTF-8,一般不是代码问题。


二、快速排查步骤

✅ 1. 查看系统编码

locale

正常应看到:

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

如果是:

LANG=C

❌ 就是问题根源


✅ 2. 查看日志文件编码

file your.log

或:

enca your.log

✅ 3. 测试 Go 输出

package main

import "fmt"

func main() {
    fmt.Println("中文测试")
}

运行:

go run main.go

如果终端乱码 → 终端问题
如果文件乱码 → 写入/系统编码问题


三、解决方案(按推荐顺序)

✅ 方案 1:修改 CentOS 为 UTF-8(最重要)

sudo localedef -i en_US -f UTF-8 en_US.UTF-8

编辑:

sudo vi /etc/locale.conf

内容:

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

生效:

source /etc/locale.conf

✅ 方案 2:运行 Go 程序前指定环境变量

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
go run main.go

或在 systemd 服务中:

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

✅ 方案 3:终端工具设置 UTF-8

  • Xshell:文件 → 属性 → 终端 → 编码 → UTF-8
  • VS Code 终端:默认 UTF-8
  • SecureCRT:Session Options → Terminal → Appearance → UTF-8

✅ 方案 4:日志库强制 UTF-8(推荐 Zap)

logger, _ := zap.NewProduction()
logger.Info("中文日志测试")

Zap 默认 UTF-8,不乱码。


四、常见误区

❌ 在代码里强行转 GBK
❌ 修改 Go 源码编码
✅ 系统 Locale 才是根因


五、如果你愿意

你可以贴:

  • locale 输出
  • 日志片段(乱码示例)
  • 用的日志库(log / zap / logrus)

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

0 踩