編碼 - 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 不知道會不會


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM