分享一个彩色控制台日志的实现方案-基于slf4j-simple改造

概述

使用idea写spring boot程序、或使用STS开发Springboot程序时,控制台的彩色字体好帅呀。
我自己写的非Spring Boot的练习/验证工程时,发现控制台字体不是彩色的,抽时间研究了下,写了个彩色控制台log的组件。灵感来源于:maven、Spring Boot。

基于slf4j-simple改编

我是个懒人,或者说性能控,我只需要最简单的log内容、最佳的性能,我不需要复杂的log系统,我要能够定制所有的内容,所以重写了一个彩色控制台log的java组件。

实现原理

不说slf4j的log组件的实现原理了。只说控制台彩色log的实现。目前我见到的java系统的控制台彩色log只在maven——3.5.0以后的版本中以及Spring Boot的log系统中,它们两个的实现方式都是类似的——基于ansi控制字符实现控制台输出彩色字符。如果要显示ansi彩色字符,控制台必须支持ansi彩色字符,所有类unix系统的控制台都是支持ansi的,比如Linux、mac等。默认情况下,windows的控制台不支持ansi字符,可喜的是有一个c写的扩展,可以让window的控制台支持ansi字符——jansi
参考了SpringBoot及maven的实现方案及我的使用需求——基本就是在idea或eclipse中调试程序,只是在slf4j的配置项上增加了一个选项ansiLog,其默认值为true。
如果要在Windows的控制台下执行,目前来说,请把ansiLog这个选项设置成false——这也是无奈之举。原因就是,在控制台上使用jansi组件时,需要执行:AnsiConsole.systemInstall();AnsiConsole.systemUninstall();,作为maven一个封闭的体系,这没有问题,在SpringBoot中,需要在自己的编程代码里实现这个东西,就显得有点画蛇添足了,所以SpringBoot里,把Windows控制台情况的ansi色彩显示在程序中处理掉了——可以参见spring-boot:2.1.8.RELEASE的org.springframework.boot.ansiAnsiOutput.detectIfAnsiCapable()方法,我这里也一样,不能因为用个log组件,代码里再改一些内容。

使用方法

可能的化,还是建议把组件发布到自己的nexus私服上;
次之,就是执行:maven install;
pom.xml中引入:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-gao</artifactId>
<version>1.7.25</version>
</dependency>
就像使用slf4j-simple一样的使用就可以看到彩色的控制台log了;当然,环境必须是idea或ecipse中安装的AnsiConsole组件,或者Linux系统的控制台直接运行也可以。

写简单的hibernate程序时,也可以使用这个彩色的log,需要在类的开头加一句,原因请参见hibernate的文档——Logging那一部分:

static {
    System.getProperties().setProperty("org.jboss.logging.provider", "slf4j");
}

最近发现了个msys2的控制台直接支持ansi很爽,配置参见:Msys2更舒适的配置,各种软件一装、配置下就跟直接使用linux赶脚差不多。

色彩方案

综合Spring Boot和maven的色彩方案,我总结了一套颜色方案——目标是在查看log时,能迅速发现问题:
faint{dateTime} faint{threadName} ?clr{level} cyan{loggerName} default{logMsg}

?clr: debug/trace: white; info: bright-green; warn: bright-yellow; error: bright-red.

选项配置

参见:slf4j-simple的配置
我又增加了一个:
org.slf4j.simpleLogger.ansiLog=true #是否显示ansi彩色log。默认值true

源代码

请参见: 代码

后续准备放到gitee上,不定时更新。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值