springboot~logback按level添加不同的颜色
2023-03-31 10:38:44 时间
对于logback的模板来说,我们是可以自定义的,同时它也提供了一些公开的常量,比如%level,%thread这些,我们如果希望自定义这些常量,需要实现ClassicConverter抽象类,重写它的convert方法。
系统变量
- %thread 当前线程
- %d{yyyy-MM-dd HH:mm:ss.SSS} 当前日期时间
- %level 日志级别
- %msg 日志主体
- %n 换行
自定义变量ClassicConverter
ClassicConverter对象负责从ILoggingEvent 提取信息,并产生一个字符串。例如,LoggerConverter,它是处理“% logger”转换符的转换器,
它从ILoggingEvent提取logger 的名字并作为字符串返回。
- 例如,一个按日志级别实现的颜色转化器
/**
* 日志模板:基于日志级别的颜色的转换器
*/
public class LevelColorClassicConverter extends ClassicConverter {
private static final String END_COLOR = "u001b[m";
private static final String ERROR_COLOR = "u001b[0;31m";
private static final String WARN_COLOR = "u001b[0;33m";
@Override
public String convert(ILoggingEvent event) {
StringBuffer sbuf = new StringBuffer();
sbuf.append(getColor(event.getLevel()));
String result = String.format("%5s", event.getLevel());
sbuf.append(result);
sbuf.append(END_COLOR);
return sbuf.toString();
}
/**
* Returns the appropriate characters to change the color for the specified logging
* level.
*/
private String getColor(Level level) {
switch (level.toInt()) {
case Level.ERROR_INT:
return ERROR_COLOR;
case Level.WARN_INT:
return WARN_COLOR;
default:
return "";
}
}
}
- 配置和模板
<conversionRule conversionWord="color" converterClass="com.lind.common.LevelColorClassicConverter" />
<appender name="consoleLog" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ${springAppName} %ip [%thread] %color %msg%n</pattern>
</layout>
</appender>
- 运行截图
自定义PatternLayout
如果你的自定义classicConvert比较多时,又不想在xml中通过conversionRule一个个注册,就需要自定义PatternLayout了,接着上面的LevelColorConverter来写一个PatternLayout.
- StandardPatternLayout
public class StandardPatternLayout extends PatternLayout {
static {
defaultConverterMap.put("color", LevelColorConverter.class.getName());
}
}
- 添加对应的配置项,不需要添加conversionRule项,在pattern中,也是可以直接使用定义好的常量的
<layout class="com.lind.common.logger.StandardPatternLayout">
<pattern>
%d{yyyy-MM-dd HH:mm:ss.SSS} ${springAppName} %browserType %ip %currentUser [%thread] %color %msg%n
</pattern>
</layout>
通过这个例子,我们也可以自定义输出服务器的IP地址等,像链路追踪traceId也是通过这种方式进行追加的。
相关文章
- 深入探讨Java中的异常与错误处理
- 研究学习Kotlin的一些方法
- 数据显示Java热度持续下落,日子屈指可数?
- 2017年5月编程语言排行榜:Java与C语言优势正开始缩小
- Java多线程之内置锁与显示锁
- Java线程池的理论与实践
- 白话阿里巴巴Java开发手册(编程规约)
- 关于Java你不知道的十件事
- Java服务化系统线上应急和技术攻关,你必须掌握的Linux命令
- Java实现高斯模糊和图像的空间卷积
- Java阻塞队列实现原理分析
- NPM使用技巧
- Node.js对Java开发者而言是什么?
- Java反射机制应用实践
- 理解RxJava中的Single和Completable
- 2017年你不能错过的Java类库
- 大规模集群下的Hadoop NameNode
- 从源码解密Spark内存管理
- 2017年3月编程语言排行榜:Swift首次进入前十
- JVM热点技术:Java类的加载机制