對於logback的模板來說,我們是可以自定義的,同時它也提供了一些公開的常量,比如%level,%thread這些,我們如果希望自定義這些常量,需要實現ClassicConverter抽象類,重寫它的convert方法。 系統變數 %thread 當前線程 %d{yyyy-MM-dd HH:mm: ...
對於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也是通過這種方式進行追加的。
作者:倉儲大叔,張占嶺,
榮譽:微軟MVP
QQ:853066980
支付寶掃一掃,為大叔打賞!