🧁自定义请求Id
LiteFlow支持让你自定义你的请求Id。
大家在执行一条流程的时候,往往可以在日志信息中看到以下类似的信息:
2022-07-03 11:15:00.196 INFO 71275 --- [ main] com.yomahub.liteflow.flow.element.Node : [067a0baa6d434de3a8ccafa4b1506562]:[O]start component[a] execution
2022-07-03 11:15:00.204 INFO 71275 --- [ main] com.yomahub.liteflow.flow.element.Node : [067a0baa6d434de3a8ccafa4b1506562]:[O]start component[b] execution
2022-07-03 11:15:00.218 INFO 71275 --- [lf-when-thead-0] com.yomahub.liteflow.flow.element.Node : [067a0baa6d434de3a8ccafa4b1506562]:[O]start component[c] execution
2022-07-03 11:15:00.220 INFO 71275 --- [lf-when-thead-1] com.yomahub.liteflow.flow.element.Node : [067a0baa6d434de3a8ccafa4b1506562]:[O]start component[d] execution
2022-07-03 11:15:00.220 INFO 71275 --- [ main] com.yomahub.liteflow.slot.Slot : [067a0baa6d434de3a8ccafa4b1506562]:CHAIN_NAME[chain1]
a<1>==>b<0>==>c<0>==>d<0>
2022-07-03 11:15:00.221 INFO 71275 --- [ main] com.yomahub.liteflow.slot.DataBus : [067a0baa6d434de3a8ccafa4b1506562]:slot[0] released
其中日志主体中最前面的就是RequestId,一个请求中的requestId都是相同的,方便你进行日志查找。
这个requestId的形式也是可以自定义的。你可以按照自己的规则生成,也可以传入本来已有的TraceId来和系统做集成。
# 按照自己的规则生成
你只需要要声明一个类,然后实现RequestIdGenerator
接口即可:
public class CustomRequestIdGenerator implements RequestIdGenerator {
@Override
public String generate() {
return System.nanoTime();
}
}
然后在LiteFlow的配置文件里声明下你这个类即可:
liteflow.request-id-generator-class=com.yomahub.liteflow.test.requestId.config.CustomRequestIdGenerator
一般情况下,LiteFlow有自己默认的Id生成规则。所以大多数情况下你并不需要去特别自定义这个Id生成器。
# 传入已有的requestId/traceId
LiteFlow在v2.10.5版本中对于这个特性给予了支持。在FlowExecutor进行调用的时候,你可以调用如下方法来传入一个已有的requestId。
如果有小伙伴用了TraceId的框架,可以把TraceId通过以下这种方式进行传入:
LiteflowResponse response = flowExecutor.execute2RespWithRid("chain1", arg, "T001234", YourContext.class);
那么,这个链路中所有的框架日志前,都会带有[T001234]这个传入的ID了。
# 给组件中的日志也加上请求ID前缀
值得一提的是,LiteFlow还提供了一个日志包装类。只要你在组件中把slf4j的日志声明换成如下形式,那么你在组件中自己打出的日志也会带有请求ID前缀。
private final LFLog logger = LFLoggerManager.getLogger(FlowExecutor.class);
其中LFLog
这个类是继承自slf4j的Logger
类的,所以它的使用方式和Logger
是完全一致的。
你只需要把定义换一下就ok了。
如果在一个链路中相同请求的日志都拥有同一个请求ID,那么对于定位问题来说,会很方便。推荐大家使用此特性。
帮助我们改善此文档 (opens new window)
上次更新: 2024/04/09, 18:39:17