春季启动横幅打印后如何将终端颜色恢复为默认值
Posted
技术标签:
【中文标题】春季启动横幅打印后如何将终端颜色恢复为默认值【英文标题】:How to restore terminal color to default after spring boot banner has printed 【发布时间】:2018-07-01 15:49:30 【问题描述】:Spring boot 通过banner.txt
提供了一个支持颜色的可配置横幅,例如
$AnsiColor.RED
__ __ ____ _ ____
| \/ |_ _ | _ \ ___ __| | | __ ) __ _ _ __ _ __ ___ _ __
| |\/| | | | | | |_) / _ \/ _` | | _ \ / _` | '_ \| '_ \ / _ \ '__|
| | | | |_| | | _ < __/ (_| | | |_) | (_| | | | | | | | __/ |
|_| |_|\__, | |_| \_\___|\__,_| |____/ \__,_|_| |_|_| |_|\___|_|
|___/
$AnsiColor.BRIGHT_WHITE
不幸的是,横幅的最终颜色为 Spring Boot 应用程序的所有输出设置了颜色。 BRIGHT_WHITE
的最终颜色对于默认的 linux 背景BLACK
来说是可以的,但我也在 intellij 控制台中运行我的应用程序,它有一个白色背景,所以在横幅之后我看不到任何输出。
横幅打印到标准输出后,如何将终端前景色和背景色恢复为横幅打印前的颜色?
将我的 Intellij 终端窗口的背景颜色设置为 BLACK
不是解决方案,因为这需要本地自定义 IDE 以产生正常/预期的行为,以及其他团队成员的行为可能不喜欢或不想要。使用 Intellij 的默认设置在本地运行应用程序会令人惊讶,并想知道为什么应用程序没有产生任何输出。
同样,Linux 终端也是如此,它可能没有默认颜色设置 - 终端颜色也是个人选择,绝不应该是操作要求。
【问题讨论】:
【参考方案1】:试试$AnsiColor.DEFAULT。我没有尝试过,但发现了一些示例,它们以自定义颜色开始横幅并以默认颜色结束。例如here、here、here 和here。
【讨论】:
这行得通。我什至假设/猜测应该存在AnsiColor.DEFAULT
,但 Intellij 没有在编辑器中将其显示为代码完成选项,所以我停止了这种想法。现在已经尝试过了,即使在输入 $AnsiColor.DEFAULT
之后,Intellij 也会抱怨(仅警告)它 Cannot resolve property 'AnsiColor.DEFAULT'
。但是,当我打开课程AnsiColor
时,第一个条目是DEFAULT
。 Intellij 中显然存在一个错误,它似乎不知道枚举实例 AnsiColor.DEFAULT
!【参考方案2】:
$AnsiStyle.NORMAL
为我工作(在 Spring Boot 2 中测试)。
IntelliJ IDEA(用 2019.3 测试)也知道 $AnsiStyle.NORMAL
并且不给出警告。
$AnsiColor.RED
__ __ ____ _ ____
| \/ |_ _ | _ \ ___ __| | | __ ) __ _ _ __ _ __ ___ _ __
| |\/| | | | | | |_) / _ \/ _` | | _ \ / _` | '_ \| '_ \ / _ \ '__|
| | | | |_| | | _ < __/ (_| | | |_) | (_| | | | | | | | __/ |
|_| |_|\__, | |_| \_\___|\__,_| |____/ \__,_|_| |_|_| |_|\___|_|
|___/
$AnsiStyle.NORMAL
【讨论】:
【参考方案3】:$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
【讨论】:
以上是关于春季启动横幅打印后如何将终端颜色恢复为默认值的主要内容,如果未能解决你的问题,请参考以下文章