0. 开发环境
- Windows Server 2012 R2
- Intellij Idea 2020.1
- jdk 8
- Spring Boot 2.3.1
1. 问题描述
近日开发了一个小的项目维护工具,为了可以在管理页面上直接查看应用运行日志,借助了 Spring Boot 自带的 actuator 中的 logfile
端点,起初在 idea 中开发时,访问 http://localhost:8080/actuator/logfile
时,返回的日志信息中中文都是正常的,在一切开发完毕后,使用 mvn 打包后直接使用 java -jar xxx.jar
模式运行项目,发现在访问 /actuator/logfile
时,其中的中文日志都变成了乱码。经分析,在 idea 中以源码方式运行时,生成的 log 文件编码为 utf-8 ,打包后使用 jar -jar xxx.jar
方式运行时,生成的 log 文件编码为 gbk ,后查看 actuator 的源码,发现获取 log 信息端点中 Content-Type
为 application/json; charset=utf-8
,且未提供可配置项进行修改,因生成的日志文件编码与 Content-Type
不一致,导致访问乱码。后经查阅资料和与其他朋友请教,是因为在 Windows server 2012 r2 的操作系统下,默认系统编码为 gbk,为了解决乱码问题,需要调整使用 java -jar
模式启动时的系统编码配置,即添加 -Dfile.encoding=utf-8
,完整命令为 java -Dfile.encoding=utf-8 -jar xxx.jar
,执行完成后再生成的文件内容编码就变成了 utf-8
,与 /actuator/logfile
默认返回编码一致,乱码问题至此已解决。