【问题标题】:How to set log4j version 2.3 encoding如何设置 log4j 版本 2.3 编码
【发布时间】:2026-02-21 13:20:11
【问题描述】:

我在我的 Web 应用程序中使用了 log-4-j 2.3 版。 一切都很好,但 Unicode 字符被记录为“?”在目标文件中。 如何将字符编码设置为 Unicode 8 以防止出现此问题? 这是我的示例代码: 我已经编写了一个主要方法来在 Eclipse 上运行我的测试它工作正常。但是当从浏览器运行这个 jeryey Web 服务时(我的应用服务器是 weblogic),所有波斯字符都显示为“?”在日志文件中:

public static void main(String[] args ) {
    UserRestServices service = new UserRestServices();
    service.test();
}

@Path("test")
@GET
public String test() {
    String newString;
    try {
        newString = new String("فارسی".getBytes(), "UTF8");
        APLogManager.infoLogger.info(newString);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
    return "test compeleted";
}

【问题讨论】:

    标签: xml encoding utf-8 log4j2


    【解决方案1】:

    您可以设置布局的字符集。例如:

    <PatternLayout
        charset="UTF-8"
        pattern="%d %p %c{1.} [%t] %m%n" />
    

    【讨论】:

    • 它不起作用,为了更清楚,我在问题详细信息中添加了一些新信息
    • 当您创建 newString 对象时,您使用的是一个字节数组,代表平台默认字符编码中的波斯字符串。我认为这不是 UTF8。然后通过告诉 Java 将这些字节解释为 UTF8 编码字符串来创建 newString 对象。这将不起作用并导致????输出,无论你使用 log4j 还是 System.out.println。
    • 解决方案是将您的配置更改为设置charset="UTF-8",然后只需记录您的波斯语字符串,而无需尝试手动转换编码:APLogManager.infoLogger.info("فارسی");
    • 通过将参数“-Dfile.encoding=UTF-8”添加到 java 命令中,它可以正常工作。非常感谢。