温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java Logger 为何中文乱码

发布时间:2026-09-12 12:03:09 来源:亿速云 阅读:89 作者:小樊 栏目:编程语言

在 Java 中使用 Logger(通常指 java.util.logging.Logger)时出现中文乱码,根本原因是字符编码不一致写日志时使用的编码读取/显示日志时使用的编码不同。

下面按常见场景说明原因和解决办法。


一、常见原因

1. 控制台编码不一致(最常见)

  • Logger 默认把日志输出到 控制台(System.out / System.err)
  • 控制台编码通常不是 UTF-8(例如 Windows 是 GBK)
  • Java 源码是 UTF-8,但控制台按 GBK 解析 → 乱码

例如:

logger.info("中文日志测试");

在 Windows 命令行可能显示:

??????

2. 日志文件编码不是 UTF-8

如果你配置了 FileHandler

FileHandler fh = new FileHandler("log.txt");
logger.addHandler(fh);

默认 FileHandler 不是 UTF-8 编码(通常是系统默认编码)


3. IDE 控制台编码问题(IntelliJ / Eclipse)

  • IDE 控制台编码 ≠ 项目编码
  • 即使代码是 UTF-8,控制台仍可能用 GBK

4. 日志框架混用

  • java.util.logging
  • log4j / logback / slf4j

不同框架默认编码不同,配置没有统一


二、解决方案

✅ 方案 1:指定 JVM 文件编码(推荐)

启动 Java 时加参数:

java -Dfile.encoding=UTF-8 -jar app.jar

或 IDE 中:

  • IntelliJ:Run → Edit Configurations → VM options
-Dfile.encoding=UTF-8

✅ 这是最通用、最根本的方法


✅ 方案 2:FileHandler 指定 UTF-8(JUL)

FileHandler fh = new FileHandler("log.txt", true);
fh.setEncoding("UTF-8");
logger.addHandler(fh);

✅ 方案 3:使用 logging.properties

java.util.logging.FileHandler.encoding=UTF-8

启动参数:

-Djava.util.logging.config.file=logging.properties

✅ 方案 4:IDE 控制台编码设置

IntelliJ IDEA

  • Settings → Editor → File Encodings
    • Global / Project Encoding = UTF-8
  • Help → Edit Custom VM Options
-Dfile.encoding=UTF-8

Eclipse

  • Run → Run Configurations → Common → Encoding = UTF-8

✅ 方案 5:改用 Logback / Log4j2(更推荐)

<encoder>
  <pattern>%d %msg%n</pattern>
  <charset>UTF-8</charset>
</encoder>

现代项目几乎都推荐 Logback + SLF4J


三、快速自查清单 ✅

  • [ ] 源码是 UTF-8
  • [ ] JVM 启动参数 -Dfile.encoding=UTF-8
  • [ ] 日志文件 / 控制台编码一致
  • [ ] 使用的是哪种 Logger(JUL / Log4j / Logback)

如果你愿意,可以告诉我:

  • 用的是 java.util.logging 还是 log4j/logback
  • 日志输出到 控制台 / 文件
  • 操作系统(Windows / Linux / macOS)

我可以给你精准配置示例

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI