温馨提示×

centos java日志编码怎么设置

小樊
45
2026-09-12 00:33:14
栏目: 编程语言

在 CentOS 上设置 Java 日志编码,通常可以从JVM 参数、日志框架配置、系统环境、文件/终端编码几个层面来处理。下面按常见场景说明。


一、最常用:通过 JVM 参数设置编码(推荐)

Java 日志最终是“字符 → 字节”写文件的,JVM 默认编码很关键。

1. 设置全局编码为 UTF-8

java -Dfile.encoding=UTF-8 \
     -Dsun.jnu.encoding=UTF-8 \
     -jar your-app.jar

或在 JAVA_OPTS 中:

export JAVA_OPTS="-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8"

✅ 影响:

  • 控制台输出
  • 文件日志
  • 读取配置文件

二、Logback 日志编码设置(Spring Boot 常用)

1. 控制台(ConsoleAppender)

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
    </encoder>
</appender>

2. 文件(FileAppender / RollingFileAppender)

<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/app.log</file>
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n</pattern>
    </encoder>
</appender>

⚠️ 不设置 charset,Logback 会用 JVM 默认编码


三、Log4j / Log4j2 设置编码

Log4j 1.x

log4j.appender.file.encoding=UTF-8

Log4j2

<Console name="Console" target="SYSTEM_OUT">
    <PatternLayout charset="UTF-8" pattern="%d %p %c - %m%n"/>
</Console>

四、CentOS 系统编码检查(很重要)

即使 Java 设置正确,系统编码不对也会乱码。

查看当前编码

locale

推荐设置

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

永久生效:

vim /etc/locale.conf
LANG=en_US.UTF-8

五、Tomcat 场景(常见坑)

1. catalina.sh

JAVA_OPTS="-Dfile.encoding=UTF-8"

2. 日志编码

conf/logging.properties

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

六、快速排查清单 ✅

检查项 命令/位置
JVM 编码 java -Dfile.encoding=UTF-8
系统编码 locale
日志框架 logback/log4j 配置
文件编码 file app.log
终端 echo $LANG

七、典型问题一句话总结

Java 日志乱码 = JVM 编码 ≠ 日志文件编码 ≠ 系统终端编码

如果你能告诉我:

  • 用的什么框架(Spring Boot / 普通 Java / Tomcat)
  • 日志框架(Logback / Log4j2)
  • 是控制台乱码还是文件乱码

我可以直接给你一份可复制的配置

0