本文介紹應用集成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); } }