温馨提示×

linux日志乱码怎么处理

小樊
44
2026-10-26 00:20:48
栏目: 智能运维

Linux 日志出现乱码,通常是编码不一致或终端/工具显示问题导致的。可以按下面思路逐步排查和处理。


一、先确认乱码原因

1. 查看文件编码

file 日志文件
# 或
enca 日志文件

常见情况:

  • UTF-8 → 正常
  • GBK / GB2312 → 容易乱码
  • ISO-8859-1 → 英文正常,中文乱码

二、终端/SSH 客户端编码问题(最常见)

现象

  • cat 看乱码
  • vim 看正常或反之

解决

确保 终端编码 = 日志编码

以 UTF-8 为例(推荐)

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

检查:

locale

SSH 工具(Xshell / SecureCRT / MobaXterm):

  • 编码设为 UTF-8

三、日志本身是 GBK,但系统是 UTF-8

方法 1:转换编码(推荐)

iconv -f GBK -t UTF-8 日志文件 > 新文件.log

查看:

cat 新文件.log

方法 2:用 vim 指定编码

vim 日志文件
:set fileencodings=gbk,utf-8
:e

或:

vim ++enc=gbk 日志文件

四、程序写入日志时编码不对(根本解决)

Java 示例

-Dfile.encoding=UTF-8

Python 示例

logging.basicConfig(
    filename='app.log',
    encoding='utf-8'
)

Shell 脚本

export LANG=zh_CN.UTF-8

五、systemd / journalctl 乱码

journalctl -u 服务名 --no-pager

若乱码:

export LC_ALL=C.UTF-8
journalctl -u 服务名

或导出查看:

journalctl -u 服务名 > app.log
iconv -f GBK -t UTF-8 app.log

六、Docker 容器日志乱码

容器里:

locale

运行容器时:

docker run -e LANG=C.UTF-8 ...

七、快速自查清单 ✅

  • [ ] locale 是否为 UTF-8
  • [ ] SSH 客户端编码是否为 UTF-8
  • [ ] 日志文件真实编码(file / enca)
  • [ ] 程序写入时是否指定编码
  • [ ] 是否用 iconv 转换过

如果你愿意,可以把:

  • 日志示例(几行)
  • file 日志文件 的输出
  • 操作系统版本

发给我,我可以帮你精准定位是哪一层的问题。

0 踩