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

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

【问题讨论】:

    标签: 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= %d{yyyy-MMM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{15}) - %msg %n
    

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

    %date  %highlight(%-5level) [%12.12thread] %cyan(%-40.40logger{40}) : %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 - 它也在测试中生成彩色控制台