如何在打印 spring 引导横幅后将终端颜色恢复为默认颜色

How to restore terminal color to default after spring boot banner has printed

Spring 引导通过 banner.txt 提供支持颜色的可配置横幅,例如

${AnsiColor.RED}
  __  __         ____          _   ____                              
 |  \/  |_   _  |  _ \ ___  __| | | __ )  __ _ _ __  _ __   ___ _ __ 
 | |\/| | | | | | |_) / _ \/ _` | |  _ \ / _` | '_ \| '_ \ / _ \ '__|
 | |  | | |_| | |  _ <  __/ (_| | | |_) | (_| | | | | | | |  __/ |   
 |_|  |_|\__, | |_| \_\___|\__,_| |____/ \__,_|_| |_|_| |_|\___|_|   
         |___/                                                       
${AnsiColor.BRIGHT_WHITE}

不幸的是,横幅的最终颜色设置了 spring 启动应用程序之后的所有输出的颜色。对于 BLACK 的默认 linux 背景,最终颜色 BRIGHT_WHITE 是可以的,但我也在 intellij 控制台中 运行 我的应用程序,它有一个白色背景,所以我可以'在横幅后看到任何输出。

横幅打印到标准输出后,如何将终端前景色和背景色恢复到横幅打印前的颜色?


将我的 Intellij 终端 window 的背景颜色设置为 BLACK 不是解决方案,因为这需要 [=30] 的本地自定义=] 产生 normal/expected 行为,而其他团队成员可能不喜欢或不想要的行为。 运行 使用 Intellij 的默认设置本地应用程序会令人惊讶,并且想知道为什么应用程序没有产生任何输出。

此外,linux 终端也是如此,它可能没有默认颜色设置 - 同样,终端颜色是个人选择,绝不应成为操作要求。

尝试${AnsiColor.DEFAULT}. I have not tried this but found a few examples which start the banner with a custom color and end it with default. For instance here, here, here and here

${AnsiStyle.NORMAL} 对我有用(在 Spring Boot 2 中测试)。

IntelliJ IDEA(用2019.3测试)也知道${AnsiStyle.NORMAL}并且不给出警告

${AnsiColor.RED}
  __  __         ____          _   ____                              
 |  \/  |_   _  |  _ \ ___  __| | | __ )  __ _ _ __  _ __   ___ _ __ 
 | |\/| | | | | | |_) / _ \/ _` | |  _ \ / _` | '_ \| '_ \ / _ \ '__|
 | |  | | |_| | |  _ <  __/ (_| | | |_) | (_| | | | | | | |  __/ |   
 |_|  |_|\__, | |_| \_\___|\__,_| |____/ \__,_|_| |_|_| |_|\___|_|   
         |___/                                                       
${AnsiStyle.NORMAL}

${AnsiColor.DEFAULT} 完美运行,但它在 IntelliJ 中显示了一些不相关的警告。

${Ansi.DEFAULT} 也有效,并且没有警告。
它也提供所有其他颜色,${Ansi.BLUE}${Ansi.RED}

来源:https://mkyong.com/spring-boot/spring-boot-custom-banner-example
适用于 SpringBoot 2.5.5 和 IntelliJ 2021.2.3