我通过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上。
有人经历过这样的事情吗?或者知道是什么导致了这种情况?
这似乎是logback中的一个已知问题:%n颜色分组后不起作用
David Eckel对此问题的评论显示了一种变通方法:
解决方法:添加一个空选项列表:
<pattern>%magenta(%message){}%n</pattern>