Logback老版本为日志等级自定义输出颜色
有时候我们可能不得不需要使用老版本的logback(当然还有糟糕的Java8)

当我们想要在控制台自定义日志输出等级关键字(比如 INFO WARN)的颜色时,不能够直接使用%coloredLevel来直接在日志pattern内进行颜色指定,该方法只在logback 1.3+版本才有效。
当我们试图在比这版本更旧的logback中使用时:
<pattern>
%yellow(%d{HH:mm:ss.SSS}) %coloredLevel([TRACE=blue;DEBUG=green;INFO=yellow;WARN=magenta;ERROR=red]) %green([%thread]) %cyan(%logger{20}) - %magenta([%method,%line]) - %msg%n
</pattern>
就会喜提logback配置解析错误

幸好logback可以自定义颜色转换器类,从而实现为不同文字分配不同颜色
我们可以在logback的配置文件注册自定义转换器类
<conversionRule conversionWord="customLevel" converterClass="com.example.CustomColorLevelConverter" />
然后在对应的包中实现这个类
package com.example;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.pattern.ClassicConverter;
import ch.qos.logback.classic.spi.ILoggingEvent;
public class CustomColorLevelConverter extends ClassicConverter
{
@Override
public String convert(ILoggingEvent event) {
String levelStr;
switch (event.getLevel().toInt()) {
case Level.ERROR_INT:
levelStr = "\u001b[1;31m" + event.getLevel().toString() + "\u001b[0m"; // 红色粗体
break;
case Level.WARN_INT:
levelStr = "\u001b[1;33m" + event.getLevel().toString() + "\u001b[0m"; // 黄色粗体
break;
case Level.INFO_INT:
levelStr = "\u001b[32m" + event.getLevel().toString() + "\u001b[0m"; // 绿色
break;
case Level.DEBUG_INT:
levelStr = "\u001b[34m" + event.getLevel().toString() + "\u001b[0m"; // 蓝色
break;
case Level.TRACE_INT:
levelStr = "\u001b[36m" + event.getLevel().toString() + "\u001b[0m"; // 青色
break;
default:
levelStr = event.getLevel().toString();
break;
}
return levelStr;
}
}
然后在控制台的appender中使用它
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>
%yellow(%d{HH:mm:ss.SSS}) %customLevel %magenta([%thread]) %cyan(%logger{20}) -
%magenta([%method,%line]) - %msg%n
</pattern>
</encoder>
</appender>
然后就可以获得彩色的日志了


浙公网安备 33010602011771号