背景
在做项目开发的时候,内部提到一个技术需求:根据指定的格式输出链路日志。日志里面就有时间戳数据。
设计开发的过程中,添加一个appender作为链路日志输出专用。
需求:
在专用的appender的encoder,需要按照如下格式输出毫秒时间戳,%timestamp
代表毫秒时间戳占位符。
<encoder>
<pattern>%timestamp| xxxxxx.xxx</pattern>
</encoder>
解决方案:
-
在logback1.3之前,添加一个转换器
public class TimeStampConverter extends ClassicConverter { @Override public String convert(ILoggingEvent event) { return String.valueOf(System.currentTimeMillis()); } }
同时,在 logback-base.xml这种logback的配置文件中,添加如下
\<conversionRule>
:<include> <!-- 这里是其他配置 --> <conversionRule conversionWord="timestamp" converterClass="com.x.TimeStampConverter" /> <!-- 这里是其他配置 --> </include>
conversionWord=“timestamp” 这个 “timestamp"就可以被logback识别了,这样就能够按照下面种方式输出时间戳。
<encoder> <pattern>%timestamp| xxxxxx.xxx</pattern> </encoder>
-
经过查询资料,在logback 1.3之前的版本(不包括1.3)是不支持毫秒时间戳的输出的,因此可以直接以%msg的方式从 logger.info等方法中获取。
-
logback 1.3版本之后,可以以占位符 %micros 进行毫秒时间戳的输出。
参考连接: https://logback.qos.ch/manual/layouts.html#conversionWord
-