编码 - Tomcat - win10 控制台日志乱码 - 已解决

  1. 概述

    1. 解决 tomcat 日志乱码
  2. 背景

    1. 要在 win10 上测点东西
    2. 找了个 tomcat 发现居然忘记怎么启动了...
      1. startup.bat
    3. 启动时发现, 日志居然是乱码
    4. 第一次处理类似的问题
      1. 所以如果有什么 常识 的缺失, 请大家见谅
  3. 类型

    1. 这一篇 记录类 的博客
      1. 主要是记录自己解决问题的过程
      2. 如果要找解决方案, ref2 里的一般都能搞定
  4. 环境

    1. win10

      1. 20H2
    2. tomcat

      1. 9.0.39
      2. JAVA_HOME 配置正确
    3. java

      1. jdk11
    4. 注册表

      # 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor
      # autorun
      chcp 65001
      

1. 问题: Tomcat 启动, 日志显示乱码

  1. 概述

    1. 启动 tomcat 遇到了点问题
  2. 步骤

    1. tomcat: 解压压缩包
    2. tomcat: 运行 tomcat
      1. 双击 startup.bat 脚本
  3. 结果

    1. 执行成功
    2. localhost:8080 可以访问
  4. 问题

    1. cmd 日志是乱码的...
    2. 但是 logs 目录下面的日志, 又是正常的
  5. 这下难受了

    1. 其实 cmd 这个日志, 它爱咋样都没啥问题
      1. 也是奇怪, 为啥 logs 里是好的, 这里就是乱的...
      2. 开始百度...

2. 尝试1: 修改 tomcat 日志配置

  1. 概述

    1. 修改 tomcat 日志配置
  2. 参考

    1. ref1
  3. logging.properties

    1. handler

      1. 概述
        1. 大概是 写日志组件
        2. 类似 log4j 的 appender
    2. console.handler

      1. 发现
        1. 4 个 handler, 只有这一个没有指定 路径
        2. 配合 console, 大概率是 控制台的配置
    3. 修改

      # 原来的值, 是 UTF-8
      java.util.logging.ConsoleHandler.encoding = GBK
      
    4. 结果

      1. tomcat 成功启动
      2. 日志也不乱码了...
  4. 问题

    1. 我老早就把 cmd 改成了 utf-8 的编码, 为啥现在 tomcat 用 utf-8 反而乱码了?

3. 尝试2: 修改 catalina.bat 脚本

  1. 概述

    1. 尝试修改脚本
  2. 问题

    1. 为啥 cmd 的编码, 又是 utf-8 了?
  3. 验证

    1. 准备

      1. 启动 tomcat
    2. 验证

      1. 查看 tomcat cmd 下的编码

        # 1. cmd 窗口的标题栏上, 单击右键
        # 2. 选择 属性
        # 3. 查看 选项 选项卡
        发现 当前代码页, 居然是 936...
        
  4. 思路

    1. 思路
      1. 我能不能在 tomcat 的启动脚本里, 找到启动的语句
      2. 在 执行 tomcat 之前, 把编码替换呢?
      3. 当然可以啦...
  5. 步骤 - 这里不打算写得很详细, 我虽然最后成功了, 但我觉得方法并不好...

    1. startup.bat

      1. 因为之前没学过 bat 脚本, 所以有点痛苦
        1. 好在脚本的思路简单清晰
      2. 结论
        1. 这个脚本最后会执行命令 catalina.bat start
    2. 查看 catalina.bat 脚本

      1. 流程也相对清晰
      2. 到了 执行 startup 那里, 发现需要改 执行语句
        1. 思路
          1. 把 start 的分支, 单独提出来

          2. 把 切换编码, 和 启动 tomcat 的命令, 写到另一个 bat 脚本里

          3. 在 start 分支, 调用这个脚本

            start Tomcat /K "script.bat"
            
  6. 结果

    1. 成功启动
    2. 日志不乱吗
  7. 建议

    1. 不要使用这种方法
      1. 可能把其他功能改坏
      2. 后续更新会比较麻烦

4. 尝试3: 换个命令执行

  1. 概述

    1. 换个命令执行
  2. 思路

    1. 之前看脚本时, 发现有个 run 命令
  3. 操作

    1. 在 tomcat 的 bin 目录下, 打开 cmd

    2. 执行命令

      > catalina.bat run
      
  4. 结果

    1. 就在当前 cmd 运行 tomcat
    2. 运行成功
    3. 编码 和 cmd 编码一样
      1. 我的是 65001, 不用调, 正常了

5. 尝试4: 修改注册表

  1. 概述

    1. 修改注册表
  2. 当前编码页

    1. 之前查看过 cmd 编码
    2. 这玩意居然能用 注册表 改
    3. ref2
    4. 我咋就没想到这个东西
      1. 感觉需要 windows 的知识背景啊
      2. mfc? c#?
      3. 或许我当时就应该了解 chcp 到底是什么意思, 而不是仅仅能用就完事了...
  3. 操作

    1. 新建路径

      计算机\HKEY_CURRENT_USER\Console\Tomcat
      
    2. 添加表项

      # 名称
      CodePage
      # 值 - 10进制
      65001
      
    3. 重新尝试开启 tomcat

  4. 结果

    1. 开启成功
    2. 编码正常

ps

  1. ref

    1. 解决最新版tomcat在window10下启动可能出现启动日志乱码的情况

      1. 一个参考
      2. 我只是控制台乱了
      3. 我改 gbk 就好了
    2. win10 修改 cmd 和 tomcat 命令窗口编码为UTF8

      1. 按这个哥的办法, 改好了
    3. Using UTF-8 Encoding (CHCP 65001) in Command Prompt / Windows Powershell (Windows 10)

      1. 这位老哥在用 powershell 的时候, 遇到了这个问题...
    4. 设置cmd的codepage的方法

      1. 2010 年的帖子
      2. 当时可能还没有 65001 吧
  2. 后续

    1. 如果 idea 装了 tomcat 插件, 不知道会不会乱码
    2. jetty 不知道会不会
posted @ 2021-01-16 15:41  轩辕拾銉  阅读(826)  评论(0编辑  收藏  举报