-
概述
- 解決 tomcat 日志亂碼
-
背景
- 要在 win10 上測點東西
- 找了個 tomcat 發現居然忘記怎么啟動了...
- startup.bat
- 啟動時發現, 日志居然是亂碼
- 第一次處理類似的問題
- 所以如果有什么 常識 的缺失, 請大家見諒
-
類型
- 這一篇 記錄類 的博客
- 主要是記錄自己解決問題的過程
- 如果要找解決方案, ref2 里的一般都能搞定
- 這一篇 記錄類 的博客
-
環境
-
win10
- 20H2
-
tomcat
- 9.0.39
- JAVA_HOME 配置正確
-
java
- jdk11
-
注冊表
# 計算機\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor # autorun chcp 65001
-
1. 問題: Tomcat 啟動, 日志顯示亂碼
-
概述
- 啟動 tomcat 遇到了點問題
-
步驟
- tomcat: 解壓壓縮包
- tomcat: 運行 tomcat
- 雙擊 startup.bat 腳本
-
結果
- 執行成功
- localhost:8080 可以訪問
-
問題
- cmd 日志是亂碼的...
- 但是 logs 目錄下面的日志, 又是正常的
-
這下難受了
- 其實 cmd 這個日志, 它愛咋樣都沒啥問題
- 也是奇怪, 為啥 logs 里是好的, 這里就是亂的...
- 開始百度...
- 其實 cmd 這個日志, 它愛咋樣都沒啥問題
2. 嘗試1: 修改 tomcat 日志配置
-
概述
- 修改 tomcat 日志配置
-
參考
- ref1
-
logging.properties
-
handler
- 概述
- 大概是 寫日志組件
- 類似 log4j 的 appender
- 概述
-
console.handler
- 發現
- 4 個 handler, 只有這一個沒有指定 路徑
- 配合 console, 大概率是 控制台的配置
- 發現
-
修改
# 原來的值, 是 UTF-8 java.util.logging.ConsoleHandler.encoding = GBK
-
結果
- tomcat 成功啟動
- 日志也不亂碼了...
-
-
問題
- 我老早就把 cmd 改成了 utf-8 的編碼, 為啥現在 tomcat 用 utf-8 反而亂碼了?
3. 嘗試2: 修改 catalina.bat 腳本
-
概述
- 嘗試修改腳本
-
問題
- 為啥 cmd 的編碼, 又是 utf-8 了?
-
驗證
-
准備
- 啟動 tomcat
-
驗證
-
查看 tomcat cmd 下的編碼
# 1. cmd 窗口的標題欄上, 單擊右鍵 # 2. 選擇 屬性 # 3. 查看 選項 選項卡 發現 當前代碼頁, 居然是 936...
-
-
-
思路
- 思路
- 我能不能在 tomcat 的啟動腳本里, 找到啟動的語句
- 在 執行 tomcat 之前, 把編碼替換呢?
- 當然可以啦...
- 思路
-
步驟 - 這里不打算寫得很詳細, 我雖然最后成功了, 但我覺得方法並不好...
-
startup.bat
- 因為之前沒學過 bat 腳本, 所以有點痛苦
- 好在腳本的思路簡單清晰
- 結論
- 這個腳本最后會執行命令
catalina.bat start
- 這個腳本最后會執行命令
- 因為之前沒學過 bat 腳本, 所以有點痛苦
-
查看 catalina.bat 腳本
- 流程也相對清晰
- 到了 執行 startup 那里, 發現需要改 執行語句
- 思路
-
把 start 的分支, 單獨提出來
-
把 切換編碼, 和 啟動 tomcat 的命令, 寫到另一個 bat 腳本里
-
在 start 分支, 調用這個腳本
start Tomcat /K "script.bat"
-
- 思路
-
-
結果
- 成功啟動
- 日志不亂嗎
-
建議
- 不要使用這種方法
- 可能把其他功能改壞
- 后續更新會比較麻煩
- 不要使用這種方法
4. 嘗試3: 換個命令執行
-
概述
- 換個命令執行
-
思路
- 之前看腳本時, 發現有個 run 命令
-
操作
-
在 tomcat 的 bin 目錄下, 打開 cmd
-
執行命令
> catalina.bat run
-
-
結果
- 就在當前 cmd 運行 tomcat
- 運行成功
- 編碼 和 cmd 編碼一樣
- 我的是 65001, 不用調, 正常了
5. 嘗試4: 修改注冊表
-
概述
- 修改注冊表
-
當前編碼頁
- 之前查看過 cmd 編碼
- 這玩意居然能用 注冊表 改
- ref2
- 我咋就沒想到這個東西
- 感覺需要 windows 的知識背景啊
- mfc? c#?
- 或許我當時就應該了解 chcp 到底是什么意思, 而不是僅僅能用就完事了...
-
操作
-
新建路徑
計算機\HKEY_CURRENT_USER\Console\Tomcat
-
添加表項
# 名稱 CodePage # 值 - 10進制 65001
-
重新嘗試開啟 tomcat
-
-
結果
- 開啟成功
- 編碼正常
ps
-
ref
-
解決最新版tomcat在window10下啟動可能出現啟動日志亂碼的情況
- 一個參考
- 我只是控制台亂了
- 我改 gbk 就好了
-
win10 修改 cmd 和 tomcat 命令窗口編碼為UTF8
- 按這個哥的辦法, 改好了
-
Using UTF-8 Encoding (CHCP 65001) in Command Prompt / Windows Powershell (Windows 10)
- 這位老哥在用 powershell 的時候, 遇到了這個問題...
-
- 2010 年的帖子
- 當時可能還沒有 65001 吧
-
-
后續
- 如果 idea 裝了 tomcat 插件, 不知道會不會亂碼
- jetty 不知道會不會