2

我正在通过 Slf4j 使用 Logback。我有一个如下配置的附加程序:

    <appender name="PLAN_STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- On Windows, this will also require org.fusesource.jansi:jansi:1.17
             (or higher) on the classpath.  On a Mac, it works without it -->
        <withJansi>true</withJansi>
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} %blue(%msg) %n</pattern>
        </encoder>
    </appender>

当我向该记录器发送消息时,它们会出现在控制台上(如预期的那样),文本为蓝色(如预期的那样)。但是,在文本之后,它打印%n而不是换行,所以输出看起来像

17:36:50.184 This text is in blue %n17:36:50.200 This text is one the same line

我没有在其他地方做任何复杂的事情。我得到了记录器

private final static Logger planLogger = LoggerFactory.getLogger("PLAN")

并像使用它一样

logger.info("=== Summary ===");
for (var d: data) {
   logger.info("  Data: {}", d);
}

我尝试制作一个简单的示例来仅使用 slf4j-api、Logback-classic 和 Logback-core 作为依赖项来重现它,并且它按预期工作。我怀疑问题是整个系统依赖于其他干扰,但我不知道是什么。

在整个系统中,这些是我拥有的与日志相关的依赖项。

$ mvn dependency:tree | egrep 'log|slf4j'
[INFO] |  \- org.slf4j:slf4j-api:jar:1.7.30:compile
[INFO] |  |  |  +- org.slf4j:jcl-over-slf4j:jar:1.7.29:runtime
[INFO] +- ch.qos.logback:logback-classic:jar:1.2.6:runtime
[INFO] |  \- ch.qos.logback:logback-core:jar:1.2.6:runtime
[INFO] +- org.apache.logging.log4j:log4j-api:jar:2.17.1:compile
[INFO] \- org.apache.logging.log4j:log4j-core:jar:2.17.1:compile

(我知道,取决于 log4j 和 logback 是不好的。但我不负责执行这些事情。)

我尝试更新我的 pom 以包含所有这些依赖项,但简单的测试仍然有效。

如果这很重要,我在 Mac 上。

有没有人经历过这样的事情,或者知道是什么原因造成的?

4

1 回答 1

0

看起来这是 logback 中的一个已知问题:颜色分组后的 %n 不起作用

David Eckel 对该问题的评论显示了一种解决方法:

解决方法:添加一个空选项列表:

 <pattern>%magenta(%message){}%n</pattern>
于 2022-01-28T04:41:39.130 回答