
版本 spring boot 2.7.18 jdk version 1.8
问题:ECS 启动 打印的日志有中文 无乱码情况,到容器运行之后 竟然出现了部分中文乱码,详细把基础镜像、业务镜像都拆分了一遍 专门加上 LANG=en_US.UTF-8 ,仍然无用 包括在 k8s yaml 都增加了环境变量 依然显示 LANG=C.utf8 ,最终发现是通过阿里云控制台登录容器终端,字符集确实是有问题 通过 kubectl exec 进去之后,显示字符集是没问题的,但 java 服务启动依然会有部分中文乱码。
大佬们,请把你们的解决方案放在评论区~
1 dode 3 天前 吃瓜 |
3 Dorathea 3 天前 不用中文日志, 不折腾... |
5 dode 3 天前 使用 debian 、ubuntu 容器镜像,安装中文语言包,部署启动应用服务 |
7 midsolo 3 天前 有排除疑难杂症的时间,不如构建一个支持中文的 ubuntu 镜像。 FROM ubuntu:20.04 RUN apt-get update && \ apt-get install -y language-pack-zh-hans locales && \ locale-gen zh_CN.UTF-8 && \ update-locale LANG=zh_CN.UTF-8 ENV LANG=zh_CN.UTF-8 ENV LC_ALL=zh_CN.UTF-8 |
8 julyclyde 3 天前 应该是你没明白环境变量的传播关系导致的 我猜你说的“专门加上”是加在 bashrc 甚至.bash_profile 里了 |
9 shuangbiaog 3 天前 有没有检查 jvm 启动参数和日志框架配置呢 |
10 runliuv 3 天前 java -Dfile.encoding=utf-8 。 要么控制台有乱码,要么 TXT 日志有乱码。反正 2 者乱一样儿。 |
13 vvtf 3 天前 java 没特别设置的不会是乱码, 你可以把日志拉到本地看下是不是 utf8 格式的. 所以大概率就是终端的乱码. 需要 exec -ti 进入容器时设置一下 LANG 试试. |
14 OnlyJack OP @shuangbiaog 加的都挺全了,依然是部分中文乱码 -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dstdout.encoding=UTF-8 -Dstderr.encoding=UTF-8 -Dspring.http.encoding.charset= -Dspring.http.encding.enabled=true -Dspring.messages.encoding=UTF-8 |
16 OnlyJack OP 感谢各位大佬~ 实际上的问题出在 java 项目上,在编译的过程中 父 pom 没有指定 utf-8 导致的,包括子 pom 和运行过程中导致的。 其实这个相当于 java 项目不规范导致的,理论上都要增加 utf-8 并且要设置为全局。 父 pom 配置 <!-- 设置项目编码为 UTF-8 ,解决编译和运行时的中文乱码问题 --> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 子 pom 配置 <encoding>UTF-8</encoding> WebApplication.java // 设置系统默认编码为 UTF-8 ,解决容器环境中文乱码问题 // 必须在 Spring Boot 启动之前设置,确保日志输出使用正确的编码 System.setProperty("file.encoding", "UTF-8"); System.setProperty("sun.jnu.encoding", "UTF-8"); |