设为首页 加入收藏

TOP

springboot~logback按level添加不同的颜色
2023-07-25 21:43:06 】 浏览:34
Tags:springboot logback level 加不同 颜色

对于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写一个分布式缓存——缓存.. 下一篇Java 如何高亮 Excel 中低于或高..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目