让 Spring Boot 颜色控制台日志记录在 Intellij 中工作?

Posted

技术标签:

【中文标题】让 Spring Boot 颜色控制台日志记录在 Intellij 中工作?【英文标题】:Getting Spring Boot color console logging working within Intellij? 【发布时间】:2015-05-01 06:32:31 【问题描述】:

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

【问题讨论】:

【参考方案1】:

使用 Mac、Intellij Idea 14 和 Spring Boot v1.2.2.RELEASE,您所要做的就是设置:

spring.output.ansi.enabled=ALWAYS

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

【讨论】:

当使用Maven Build时,这个技巧也适用于Eclipse! 弹簧属性有所帮助。我将它设置在 .yml 无法使其与 spring-boot-starter=1.4.1.RELEASE 和 IntelliJ 2016.2.5 一起使用。它可以与以前版本的 Spring Boot 一起使用。 SPRING_OUTPUT_ANSI_ENABLED=ALWAYS 参数传递给环境变量也可以。【参考方案2】:

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

logging.pattern.console= %dyyyy-MMM-dd HH:mm:ss.SSS [%thread] %highlight(%-5level) %cyan(%logger15) - %msg %n

如果你想要与 Spring Boot 几乎相似,你可以使用这样的模式:

%date  %highlight(%-5level) [%12.12thread] %cyan(%-40.40logger40) : %msg %n

【讨论】:

在我的情况下,“spring.output.ansi.enabled=ALWAYS”不起作用。 感谢您的“%highlight”,这正是我所需要的!【参考方案3】:

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

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

【讨论】:

【参考方案4】: 从市场安装名为 Ansi Console 的 Eclipse 插件。 spring.output.ansi.enabled=ALWAYS @ Application.properties/yml。 以 Spring Boot 方式运行应用程序,您将在控制台中看到彩色日志。

【讨论】:

【参考方案5】:

yml:

spring:
  output:
    ansi:
      enabled: ALWAYS

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

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

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 会选择哪一个呢?根据这个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

命令我没有彩色输出。

【讨论】:

【参考方案8】:

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

spring.output.ansi.console-available=true

spring.output.ansi.enabled=ALWAYS 不同,这会使检测代码继续运行(如果您在 Windows 上则没有颜色),但会导致在测试中发生颜色记录(无论是在 IntelliJ 中还是在使用 Maven 运行时)。

【讨论】:

我认为您的配置有问题,我在主 application.properties 中使用 spring.output.ansi.enabled=ALWAYS - 它也在测试中生成彩色控制台

以上是关于让 Spring Boot 颜色控制台日志记录在 Intellij 中工作?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot 集成 Logback 日志:控制台彩色日志输出 + 日志文件输出

spring boot 让日志带上颜色

在 Spring Boot 上禁用应用程序的控制台日志记录

Spring Boot - 日志记录

Spring Boot 日志记录模式

Spring Boot 之日志记录