在 Intellij 使用 Spring Boot 彩色控制台日志?

有人想出了如何获得色彩输出工作在 Intellij 的思想,一个春天启动应用程序?

41870 次浏览

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

spring.output.ansi.enabled=ALWAYS

我已经添加了这作为一个 VM 选项(-Dspring.output.ansi.enabled=ALWAYS)!

通用的方法,使日志颜色支持在任何条件与分级:

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

应用性能中使用(例如)以下行:

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
  • 从市场上安装名为 Ansi Console 的 Eclipse 插件。
  • 启用 = ALWAYS@Application.properties/yml。
  • 在春季启动时运行应用程序,您将在控制台中看到颜色日志。

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

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不同的是,这使得检测代码可以运行(所以如果在窗口上就没有颜色) ,但是会导致颜色日志记录在测试中发生(在 IntelliJ 中以及在使用 Maven 运行时)。

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

我有两个日志框架的实现,其中一个在应用程序启动后立即得到了通知。你甚至可以拥有更多——它们都来自不同的依赖关系。所以这个信息是:

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 靴子选中呢?根据这个 教程,它将得到名单上的最后一个。这意味着您的颜色模式现在取决于一些令人愉快的随机选择(没有时间研究列表如何组装)。

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

您可以构建一个 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