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>

然后就可以获得彩色的日志了

posted @ 2024-06-21 10:30  focnal  阅读(16)  评论(0)    收藏  举报