本文介绍应用集成BWAF框架日志打印,以及BWAF日志不打印的排查办法。
BWAF打印链路日志介绍
BWAF的logging包负责打印规范化的日志,记录应用服务、商业能力、扩展点等关键组件的调用情况,作为运营平台运行时数据的来源。
链路日志的格式定义及相关说明,示例代码如下:
${Timestamp} ${SeverityText} [${TraceId}] [${SpanId}] [${Thread}] ${Logger} ${TenantID} ${AppID} [${Resource(k1:v1,k2:v2,...,kn:vn)}] [${Attributes(k1:v1,k2:v2,...,kn:vn)}] ${Body}
相关属性说明如下:
Timestamp:时间戳,例如:2021-05-13 14:38:58.195,000000纳秒
SeverityText:日志级别,例如:TRACE/DEBUG/INFO/WARN/ERROR/FATAL
TraceId:Trace标识
SpanId:Span标识
Thread:线程标识
Logger:日志记录者
TenantID:租户ID
AppID@Version:应用ID@应用版本
例如:tradecenter@1.2.1,表示ID为tradecenter的应用,版本为1.2.1,即当前这条日志是tradecenter应用的1.2.1版本打印出来的。
Resource:资源(组)包含若干二级Resource(每个二级Resource都有可能为空),逗号分隔的KV(也可以双冒号分隔KV),顺序不固定,内容包括:
Span链路相关信息:| (竖线)分隔。
spanctx:`${parentSpanId}|${spanLatency}`
parentSpanId:父span的spanId。
spanLatency:当前span花费的时间。
例如:spanctx::0axxxxxxx|203,意思是,父span的ID是0axxxxxxx,当前span用时203毫秒。
其他:
hostname:主机名
ip:IP地址
tz:时区
logver:日志格式版本
……
hostname::HaiqiangdeMacBook-Pro.local,tz::Asia/Shanghai,ip::127.0.0.1,logver::202209140915.rc,spanctx::6855dbf9ab1b6bfa|13
Attributes:属性(组)包含若干属性(每个Attribute都有可能为空),逗号分隔的KV(也可以双冒号分隔KV),顺序不固定,内容包括:
bizid:业务身份,请求中台服务的前台业务的身份标识,通过HTTP header(x-bw-biz-id)传递到中台中心应用上下文中。
bizappid:业务应用标识,请求中台服务的前台业务应用标识,通过HTTP header(x-bw-biz-app-id)传递到中台中心应用上下文中。
bizcapsvc:商业能力服务唯一标识。
appsvc:应用服务唯一标识。
dmnsvc:领域服务唯一标识。
bizext:扩展点唯一标识。
bizextimpl:扩展点实现编码。
此外,商业能力API(bizcapsvc)、应用服务(appsvc)、领域服务(dmnsvc)对应到Java代码层面都是接口/类,具体的方法,与下面svcmethod(服务方法)字段配合来表达:
svcmethod:服务方法。
svccallrstcode:调用结果编码,仅在svc调用结束的日志中存在。大于0或非数字的值代表调用成功,值本身是返回码;0代表调用失败。
svccallrstmsg:调用结果信息,仅在svc调用结束的日志中存在,调用成功时该字段可能不存在(调用成功,没有需要反馈的信息)。主要用于记录调用失败(svccallrstcode=0)时,具体的错误信息,例如:Timeout、业务异常等。
例如:
商业能力API bizcapsvc::alibaba.aliyun.bizworks.pbc.api.OrderCapAPI。
商业能力API的方法svcmethod:placeOrder。
表达商业能力API OrderCapAPI的placeOrder方法。
Body:不限定内容。
BWAF日志不打印的排查办法
您可以参考以下步骤逐步排查:
检查应用是否依赖了
BWAF logging
包,即确认运行时是否加载了BWAF logging
的JAR包。<dependency> <groupId>com.alibaba.bizworks</groupId> <artifactId>bwaf-core-traffic-logging</artifactId> <version>${BWAF.version}</version> </dependency>
确认启动日志中是否包含
BWAF logging
核心引擎初始化的日志。在应用启动日志中搜索如下内容:BWAF logging/tracing is working with
确认应用中是否使用了继承
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
的bean
。如果是的话,需要手工将BWAF logging
的Interceptor
加入进来。示例代码如下:import com.alibaba.bizworks.traffic.logging.interceptor.TracingInterceptor; @Configuration public class SpringMvcConfiguration extends WebMvcConfigurationSupport { @Autowired private TracingInterceptor tracingInterceptor; @Override protected void addInterceptors(InterceptorRegistry registry) { ... ... registry.addInterceptor(tracingInterceptor); super.addInterceptors(registry); } }