让 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 中工作?的主要内容,如果未能解决你的问题,请参考以下文章