8

我刚刚开始使用 logback 来记录我在 glassfish3 AS 上运行的 Java 项目,我注意到一些奇怪的事情。这串代码

LOG.error("Вычисление {} уже произведено.", calc);

如果我在 Windows 上运行我的应用程序,则会生成正常的预期输出。但是,如果我在 Mac 上使用相同的配置,我会使用问号而不是单词,如下所示:

15:37:29.083 ERROR r.g.g.c.TotalNachController - ?????????? [id=8871] ??? ???????????.

我的 logback 配置是:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>../logs/logback.log</file>
    <encoder>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>

有人可以告诉我,我做错了什么吗?

4

2 回答 2

17

尝试为编码器定义字符集:

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>../logs/logback.log</file>
    <encoder>
        <charset>utf-8</charset>
        <pattern>%d{HH:mm:ss.SSS} %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>

遗憾的是它没有在文档中描述,但您始终可以在源代码中查找属性。Specyfing <encoder>实例化 PatternLayoutEncoder。向上到它的父LayoutWrappingEncoder你可以找到方法setCharset()指定时使用它,如您在http://logback.qos.ch/xref/ch/qos/logback/core/encoder/LayoutWrappingEncoder.html#120中所见

于 2012-12-12T14:09:01.690 回答
0

您需要检查使用的文本编辑器是否支持您的字符集。此外,使用的终端也可能会影响显示的字符。

我建议使用应支持您的字符集的应用程序中morelessUNIX 命令Terminal来验证字符是否打印正常。

于 2012-11-02T12:25:17.757 回答