侧边栏壁纸
博主头像
蔡关荣博客 博主等级

行动起来,活在当下

  • 累计撰写 19 篇文章
  • 累计创建 9 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

记一次Linux下tomcat日志乱码排查记录

Administrator
2024-05-22 / 0 评论 / 0 点赞 / 23 阅读 / 0 字

近期因服务器到期 线上有个项目需要迁移到其他云服务器,早上迁移完程序 业务经过测试没啥大问题就没管了,下班后收到线上业务报警:

❓ 程序代码都没动过一行 怎么会签名错误 紧接着就开始排查问题 第一个想到是数据库的字符集问题 然后看了下数据库 发现字符集有点不对 然后都修改为utf8m4了 然后业务验证 还是没通过

[
  {
    "TPNO": "T002586",
    "DHDBH": "105150996",
    "FDBH": "111",
    "SPCODE": "00011111",
    "BARCODE": "00011111",
    "JHXS": 200,
    "SPWKSL": 0,
    "JHDJ_HS": 2,
    "JHJE_HS": 400,
    "SCRQ": null,
    "JHJS": 200,
    "BZHL": 1,
    "OMSCODE": "O2024052000169",
    "FHTZD": "105150996-DCMBOL240521000008",
    "DJLX": 0,
    "SPMC": "???PET??????SGL-181?",
    "SXID": null,
    "SXMC": null,
    "JDCKDBH": "OUT2024052100068"
  }
]

紧接着就看了下运行日志,发现日志输出的商品名称都是乱码,最先想着日志乱码程序执行的时候总不至于乱码吧 然后就对着代码一顿检查 然后也没发现问题 因为编辑器的文件编码都是UTF-8 所以考虑应该是Tomcat 服务配置的问题

1、修改conf/server.xml 文件 增加了URIEncoding="UTF-8"

<Connector port="80" protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

maxParameterCount="1000"

URIEncoding="UTF-8"

/>

2、修改conf/logging.properties 编码 默认就是UTF-8

然后重启服务 依旧乱码 下游系统依然返回签名错误 .......

最后没头绪了 只能求助谷歌 查询到可能的原因有三个地方conf/server.xml、conf/logging.properties和JDK的JAVA_OPTS参数设置 前两个我都逐一排查过了 那只能是JAVA_OPTS参数问题了,由于安装的时候设置过 tomcat/bin/catalina.sh 的JVM参数

JAVA_OPTS="-Xms1024m -Xmx4096m -Xss1024K"

紧接着在后面增加了 `-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8`

重启服务,查看日志都不乱码了 ,再尝试请求下游接口



终于返回成功了 最终还是JVM虚拟机JAVA_OPTS参数中的编码设置起决定性作用 我悟了

0

评论区