在 Intellij 中获取 Spring 引导颜色控制台日志记录?

Getting Spring Boot color console logging working within Intellij?

有没有人想出如何在 Intellij Idea 中为 Spring 启动应用程序获取颜色输出?

使用 Mac、Intellij Idea 14 和 Spring Boot v1.2.2.RELEASE,您只需设置:

spring.output.ansi.enabled=ALWAYS

我已将其添加为 VM 选项 (-Dspring.output.ansi.enabled=ALWAYS)。效果很好!

在任何条件下启用日志记录颜色支持的通用方法 Gradle:

bootRun {
    def console = System.console() != null
    if (! console) { console = System.getenv()["TERM"].startsWith("xterm") }
    if (console) systemProperties 'spring.output.ansi.enabled': 'always'
}

application.properties 中使用(例如)以下行:

logging.pattern.console= %d{yyyy-MMM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n

如果你想要几乎类似于 Spring 引导,你可以使用这样的模式:

%date  %highlight(%-5level) [%12.12thread] %cyan(%-40.40logger{40}) : %msg %n
  • 从市场安装名为 Ansi Console 的 Eclipse 插件。
  • spring.output.ansi.enabled=始终@应用程序。properties/yml。
  • 运行 应用程序作为 spring 启动,您将在控制台中看到彩色日志。

只需将这些属性添加到 application.properties for IntelliJ IDEA:

spring.main.banner-mode=off 
spring.output.ansi.enabled=ALWAYS

使用较新版本的 IntelliJ (2019) 和 Spring Boot (2.0) 当 运行 IntelliJ 颜色记录中的 Spring Boot 应用程序正确输出时,但是当 运行 单元测试未检测到控制台,因此未使用颜色记录。强制 Spring Boot 始终认为有一个控制台,即使它找不到以下设置 属性:

spring.output.ansi.console-available=true

spring.output.ansi.enabled=ALWAYS 不同,它会留下检测代码 运行(所以如果你在 windows 上,则没有颜色)但会导致在测试中发生颜色记录(无论是在 IntelliJ 中还是在运行 专家)。

这是我的问题来源和解决方案。

我有两个日志记录框架的实现,我在应用程序启动后立即收到通知。您甚至可以拥有更多——所有这些都来自各种依赖项。所以消息是:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:.../slf4j-simple-1.7.21.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:.../logback-classic-1.1.7.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

如您所见,找到两个指向两个记录器框架的绑定。 他们每个人都使用自己的颜色模式。那么 Spring boot chosen 是哪一个?根据此 tutorial 它将从列表中获取最后一个。这意味着您的颜色模式现在取决于一些令人愉快的随机选择(没有时间研究列表的组合方式)。

在收集到有关找到的日志记录框架绑定的信息后,我依次从我的依赖项中删除了多余的。

您可以构建一个 Maven 树来找到将不需要的 SLF4j 绑定引入项目的依赖项,然后在 Maven 或 gradle 配置文件中将其排除。

因为我正在使用 gradle,所以我刚刚将此配置添加到我的 build.gradle

configurations {
    all {
        exclude group: 'org.slf4j', module: 'slf4j-simple' // no ansi colors in terminal (:
    }
}

此排除删除不需要的绑定并将我的 ansi 颜色返回到 intellij idea 终端(因为我的项目中只剩下一个日志记录框架 - 而这个有彩色输出)。

必须注意:如果我通过 mac os 终端启动我的应用程序

java -jar fileName.jar

命令我没有彩色输出。

yml:

spring:
  output:
    ansi:
      enabled: ALWAYS