全部产品
云市场

日志类型

更新时间:2019-10-25 14:32:06

Tracer 是用于分布式系统调用跟踪的组件,为 SOFABoot 中每一个中间件服务定制了一种 Tracer 日志。本文将介绍以下 6 种日志:

RPC 日志

每一次 RPC 调用会生成相应的客户端和服务端执行日志。RPC 日志包括以下 5 种类型:

RPC 客户端详细日志格式

当 RPC 客户端调用服务端后,会生成日志 rpc-client-digest.log,该日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
应用名
当前应用名称
TraceId
25 位的 TraceId。前 8 位表示服务器 IP,而后 13 位为生成 TraceId 的时间,后 4 位为自增序列。
RcpId
调用链路的 RpcId
服务名
调用的服务名称
方法名
方法名称
协议
协议类型,可能为:
  • TR:RPC 2.2.2 之前版本使用的调用协议
  • bolt:RPC 2.2.2 及之后版本使用的调用协议
协调方式
协调方式可能为:
  • SYNC
  • CALLBACK
  • ONEWAY
目标地址
目标服务器地址
目标系统名
目标应用系统名称
保留字段
默认为空
保留字段
默认为空
保留字段
默认为空
uid
用户唯一识别码 uid
结果码
返回结果码,可能为:
  • 00:成功
  • 01:业务异常
  • 02:RPC 逻辑错误
  • 03:超时失败
  • 04:路由失败
请求大小
请求发送的数据大小,以 B(Byte)为单位
响应大小
响应请求数据大小,以 B(Byte)为单位
调用耗时
调用服务耗时,以 ms 为单位
连接建立耗时
建立连接耗时,以 ms 为单位
请求序列化耗时
以 ms 为单位
超时参考耗时(ms)
超时参考耗时 = 调用耗时 – 连接建立耗时
当发生调用超时时,此值可比调用耗时更加准确地反映本次请求的调用超时时间。
线程名
当前线程名
路由记录
记录路由选择的过程
穿透数据
以 key-value 格式记录

样例:

  1. 17:14:55.021,client,0ad1348f14031692950211004,0.1,com.alipay.cloudenginetest.services.SofaApiUidGeneratorRzoneTrService:1.0,service_method_uid,TR,SYNC,10.209.72.102:12200,serverone,RZ00B,dev,dev,48,00,1476B,372B,64ms,22ms,0ms,42ms,AnonymousIoService-7,sofarouter>testurl>ConfigServer>vip>zproxy,mark=T&uid=a2&
  2. 2014-06-19 17:15:33.305,client,0ad1348f14031693333051005,0.1,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,TR,SYNC,10.209.52.143:12200,client,RZ00B,dev,dev,,00,1493B,392B,6ms,1ms,1ms,5ms,AnonymousIoService-10,sofarouter>testurl>ConfigServer,mark=F&uid=12&

RPC 服务端详细日志格式

当 RPC 服务端被调用后,会生成日志 rpc-server-digest.log,该日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
应用名
当前应用名称
TraceId
25 位的 TraceId。前 8 位表示服务器 IP,而后 13 位为生成 TraceId 的时间,后 4 位为自增序列。
RpcId
调用链路的 RpcId
服务名
调用的服务名称
方法名
方法名称
协议
调用协议类型,可能为:
  • TR:RPC 2.2.2 之前版本使用的调用协议
  • bolt:RPC 2.2.2 及之后版本使用的调用协议
调用方式
调用方式可能为:
  • SYNC:同步,BOLT 默认的调用方式。
  • CALLBACK:消费方提供一个回调接口,当提供方返回后,SOFA 框架会执行回调接口。
  • ONEWAY:消费方发送请求后,直接返回,忽略提供方的处理结果。
调用者 URL
调用者的 URL
调用者应用名
调用者的应用名
保留字段
默认为空
保留字段
默认为空
请求处理耗时(ms)
处理请求所耗时间,以 ms 为单位
服务端响应序列化耗时(ms)
以 ms 为单位
线程名
当前线程名
结果码
返回的结果码,可能为:
  • 00:成功
  • 01:业务异常
  • 02:RPC 逻辑错误
穿透数据
以 key-value 格式记录

样例:

  1. 2014-06-19 17:14:35.006,client,0ad1348f14031692750021003,0.1,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,TR,,10.209.52.143,client,RZ00B,dev,12ms,0ms,HSFBizProcessor-4-thread-2,00,mark=T&uid=a2&
  2. 2014-06-19 17:15:33.309,client,0ad1348f14031693333051005,0.1,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,TR,,10.209.52.143,client,RZ00B,dev,1ms,0ms,HSFBizProcessor-4-thread-3,01,mark=F&uid=12&

RPC 客户端统计日志格式

RPC 客户端统计日志的日志名为 rpc-client-stat.log,每分钟生成一次,其日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
当前应用名
客户端应用名称
目标应用名
服务端应用名称
服务名
调用的服务名称
方法名
方法名称
调用次数
本段时间内调用次数
调用总耗时
本段时间内的调用总耗时
结果
返回调用结果:
  • Y:成功
  • N:失败
全链路压测标志
  • T:true,表示当前线程中能获取到日志上下文。
  • F:false,表示当前线程中获取不到日志上下文。

样例:

  1. 2014-06-19 17:14:02.186,client,client,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,1,79,Y,T
  2. 2014-06-19 17:09:02.146,client,,com.alipay.core.service.lazy.LazyPublisherWsService:1.0,service_method,1,26,N,F

RPC 服务端统计日志格式

RPC 服务端统计日志的日志名为 rpc-server-stat.log,每分钟生成一次,其日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
来源应用名
即客户端应用名
当前应用名
即服务端应用名
服务名
调用的服务名称
方法名
方法名称
被调用次数
本段时间内的被调用次数
请求处理总耗时
本段时间内的请求处理总耗时
结果
返回调用结果:
  • Y:成功
  • N:失败
全链路压测标志
  • T:true,表示当前线程中能获取到日志上下文。
  • F:false,表示当前线程中获取不到日志上下文。

样例:

  1. 2014-06-19 17:14:02.186,client,client,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,1,7,Y,T
  2. 2014-06-19 17:15:02.190,client,client,com.alipay.cloudenginetest.services.SofaApiWebReferenceLocalFalseTrService:1.0,service_method,1,12,Y,F

RPC 服务端性能日志格式

RPC 服务端的性能日志的日志名为 rpc-profile.log,仅在服务端生成。当服务端对请求的处理时间超时,就会生成一条服务端性能日志。该日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
应用名
当前应用名称
TraceId
25 位的 TraceId。前 8 位表示服务器 IP,而后 13 位为生成 TraceId 的时间,后 4 位为自增序列。
RpcId
调用链路的 RpcId
协议
调用协议类型,可能为:
  • TR:RPC 2.2.2 之前版本使用的调用协议
  • bolt:RPC 2.2.2 及之后版本使用的调用协议
详细情况
调用耗时的详细情况

样例:

  1. 2015-01-20 03:01:37.145,gotone,0ad682a314216940965397337,0.1.1,WS,
  2. [服务请求处理时间] 0 [426ms, 100%] - 调用 SOFA WS 服务:方法为:sendMessage 参数个数为:1
  3. `---0 [426ms (3ms), 100%, 100%] - Invoking method: com.alipay.gotone.common.service.api.MessageSendService.sendMessage
  4. +---1 [0ms] - Invoking method: com.alipay.gotone.core.service.component.common.IDGenerateComponent.generateUniqId
  5. +---1 [2ms, 0%, 0%] - Invoking method: com.alipay.gotone.common.dal.manual.daointerface.ExtraUniqueDAO.count
  6. +---3 [0ms] - Invoking method: com.alipay.gotone.core.service.component.courier.CourierOutDataComponent.constructModel
  7. | `---3 [0ms] - Invoking method: com.alipay.gotone.core.service.component.common.IDGenerateComponent.generateMsgId
  8. +---3 [0ms] - Invoking method: com.alipay.gotone.core.service.component.courier.CourierOutDataComponent.businessCheck
  9. `---3 [421ms, 99%, 99%] - Invoking method: com.alipay.gotone.core.service.component.courier.CourierOutDataComponent.saveModel
  10. +---3 [3ms, 1%, 1%] - Invoking method: com.alipay.gotone.common.dal.courier.daointerface.MsgSendDAO.insert
  11. +---6 [0ms] - Invoking method: com.alipay.gotone.core.service.component.common.IDGenerateComponent.generateUniqId
  12. `---6 [418ms, 99%, 98%] - Invoking method: com.alipay.gotone.common.dal.manual.daointerface.ExtraUniqueDAO.insert

SOFAREST 日志

每一次 SOFAREST 调用会生成相应的客户端和服务端执行日志。SOFAREST 日志包括以下 4 种类型:

SOFAREST 客户端日志

SOFAREST 客户端日志名为 rest-client-digest.log,包含以下信息:

字段 描述
时间戳 日志打印时间
应用名 当前应用名称
TraceId 25 位的 TraceId
RpcId 调用链路的 RpcId
URL 请求 URL
方法名 方法名称
目标应用 目标应用名称
目标地址 目标机器 IP 地址
结果码 返回结果码
请求大小 请求发送的数据大小,以 byte 为单位
响应大小 响应请求数据大小,以 byte 为单位
线程名 当前线程名
系统穿透数据 以 key-value 格式记录,用于传送系统灾备信息等
穿透数据 以 key-value 格式记录

样例

  1. 2015-11-04 11:00:26.556,test,0a0fe9cf14466060265051002,0,http://localhost,insert,anotherApp,10.20.30.40,100,100B,100B,49ms,main,test=test&

SOFAREST 服务端日志

SOFAREST 服务端日志名为 rest-server-digest.log,包含以下信息:

字段 描述
时间戳 日志打印时间
应用名 当前应用名称
TraceId 25 位的 TraceId
RpcId 调用链路的 RpcId
URL 请求 URL
方法名 方法名称
来源应用 来源应用名称
来源地址 来源应用 IP 地址
结果码 返回结果码
请求大小 请求发送的数据大小,以 byte 为单位
响应大小 响应请求数据大小,以 byte 为单位
线程名 当前线程名
系统穿透数据 以 key-value 格式记录,用于传送系统灾备信息等
穿透数据 以 key-value 格式记录

样例

  1. 2015-11-04 11:00:24.475,test,0a0fe9cf14466060243451001,0,http://localhost,insert,fromApp,fromAddress,400,100B,100B,128ms,main,test=test&

SOFAREST 客户端统计日志

SOFAREST 客户端统计日志名为 rest-client-stat.log,每分钟打印一次,该日志包含以下信息:

字段 描述
时间戳 日志打印时间
来源应用名 fromApp,即当前应用的名称
目标应用名 toApp,即目标应用的名称
URL 请求 URL
方法 方法名称
被调用次数 本段时间内的被调用次数
请求处理总耗时 本段时间内的请求处理总耗时
结果
  • Y:成功
  • N:失败
全链路压测标志
  • T:True,表示当前线程中能获取到日志上下文。
  • F:False,表示当前线程中获取不到日志上下文。

样例:

  1. 2015-11-04 11:00:28.445,test,anotherApp,http://localhost,insert,1,49,Y,F

SOFAREST 服务端统计日志

SOFAREST 服务端统计日志名为 rest-server-stat.log,每分钟打印一次,该日志包含以下信息:

字段 描述
时间戳 日志打印时间
来源应用名 fromApp,即当前应用的名称
目标应用名 toApp,即目标应用的名称
URL 请求 URL
方法 方法名称
被调用次数 本段时间内的被调用次数
请求处理总耗时 本段时间内的请求处理总耗时
结果
  • Y:成功
  • N:失败
全链路压测标志
  • T:True,表示当前线程中能获取到日志上下文。
  • F:False,表示当前线程中获取不到日志上下文。

样例:

  1. 2015-11-04 11:00:26.445,fromApp,test,http://localhost,insert,1,128,N,F

消息队列日志

消息队列日志主要分为以下 4 种格式:

消息队列发送端详细日志格式

消息队列发送端的详细日志的日志名为 msg-pub-digest.log,其日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
应用名
当前应用名称
TraceId
25 位的 TraceId。前 8 位表示服务器 IP,而后 13 位为生成 TraceId 的时间,后 4 位为自增序列
RpcId
调用链路的 RpcId
MessageId
消息的 MessageId,标识本次操作处理的消息
EventId
事件唯一标识
TOPIC
以“TP”开头的标识
EVENTCODE
以“EC”开头的标识
消息发送方 GROUP
发布端唯一标识,以“P_”开头
结果码
返回结果码,可能为:
  • 00:成功
  • 01:失败
消息体大小
消息数据大小,以 B(Byte)为单位
请求处理耗时
处理请求耗时,以 ms 为单位
Status
事务状态,可能为:
  • true:事务型消息
  • false:非事务型消息
Type
消息类型:
  • L:本地
  • R:远端
服务器 IP
发送的服务器 IP
线程名
当前线程名
穿透数据
以 key-value 格式记录

样例:

  1. 2014-06-19 20:13:34.408,client,0ad1348f14031800144081003,0.1,6fafc09cd670fa39a802626ab1aab2b0,1e4cf860680dad989dceec17f1adb837,TP_DEFAULT,EC_DEFAULT,P_appname_service,00,750B,53ms,false,R,10.209.52.143,thread-1,mark=T&uid=a2&

消息队列接收端详细日志格式

消息队列接收端的详细日志名为 msg-sub-digest.log,其日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
应用名
当前应用名称
TraceId
25 位的 TraceId。前 8 位表示服务器 IP,而后 13 位为生成 TraceId 的时间,后 4 位为自增序列
RpcId
调用链路的 RpcId
MessageId
消息的 MessageId,标识本次操作处理的消息
EventId
事件唯一标识
TOPIC
以“TP”开头的标识
EVENTCODE
以“EC”开头的标识
订阅端GROUP
订阅端唯一标识,以“P_”开头
结果码
返回结果码,可能为:
  • 00:成功
  • 01:失败
消息体大小
消息数据大小,以 B(Byte)为单位
消息处理耗时(ms)
处理消息耗时,以 ms 为单位
消息队列 broker 主机名
消息队列 broker 主机名
投递次数
该消息的总投递次数
线程名
当前线程名
穿透数据
以 key-value 格式记录

样例:

  1. 2014-06-19 20:13:33.734,,0ad1348f14031800144081003,0.1.d6502e1f,6fafc09cd670fa39a802626ab1aab2b0,1e4cf860680dad989dceec17f1adb837,TP_DEFAULT,EC_DEFAULT,P_appname_service,00,750B,5ms,msgbroker-1.net,0,msgWorkTP-6623-1-thread-1,mark=T&uid=a2&

消息队列发送端统计日志格式

消息队列发送端的统计日志名为 msg-pub-stat.log,每分钟生成一次,其日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
应用名
当前应用名,即 currentApp
TOPIC
以“TP”开头的标识
EVENTCODE
以“EC”开头的标识
发布者 GROUP
以“P_”开头,一般由应用名称和服务名称组成
消息发送数量
本段时间内的消息发送数量
消息发送总耗时
本段时间内的消息发送总耗时
结果信息
消息发送结果:
  • Y:成功
  • N:失败
全链路压测标志
  • T:true,表示当前线程中能获取到日志上下文。
  • F:false,表示当前线程中取不到日志上下文。

样例:

  1. 2014-06-19 20:14:21.929,client,TP_DEFAULT,EC_DEFAULT,P_appname_service,1,53,Y,T

消息队列接收端统计日志格式

消息队列接收端的统计日志名为 msg-sub-stat.log,每分钟生成一次,其日志包含以下信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
应用名
当前应用名,即 currentApp
TOPIC
以“TP”开头的标识
EVENTCODE
以“EC”开头的标识
消费者 GROUP
以“P_”开头,一般由应用名称和服务名称组成
消息接收数量
本段时间内的消息接收数量
消息接收总耗时
本段时间内的消息接收总耗时
结果信息
消息发送结果:
  • Y:成功
  • N:失败
全链路压测标志
  • T:true,表示当前线程中能获取到日志上下文。
  • F:false,表示当前线程中取不到日志上下文。

样例:

  1. 2014-06-19 20:14:25.525,,TP_DEFAULT,EC_DEFAULT,P_appname_service,1,5,Y,T

Spring MVC 日志

说明:此功能适用于 SOFABoot 2.4.0 及以上版本。

在 SOFABoot 的 Web 项目中引入 Spring MVC 打印 Tracer 日志的功能后,每一次调用会生成日志。

Spring MVC 摘要日志

Spring MVC 摘要日志名为 spring-mvc-digest.log,包含以下信息:

字段 描述
时间戳 日志打印时间
应用名 当前应用名
TraceId 30 位的 TraceId
SpanId SpanId
URL 请求 URL
HTTP 方法 请求 HTTP 方法,GET 或 POST
HTTP 返回状态码 根据实际情况显示
Request Body 大小 HTTP Request 消息数据大小,以 B(Byte)为单位
Response Body 大小 HTTP Response 消息数据大小,以 B(Byte)为单位
请求耗时 处理请求耗时,以毫秒(ms)为单位
线程名 当前线程名
透穿的 baggage 数据 以 key-value 格式记录

样例:

  1. 2018-07-17 20:01:34.719,mvc-client,0a0fe91a1531828894436100149692,0,http://localhost:8080/greeting,GET,200,-1B,49B,281ms,http-nio-8080-exec-1,

Spring MVC 统计日志

Spring MVC 统计日志名为 spring-mvc-stat.log,包含以下信息:

字段 描述
时间戳 日志打印时间
应用名 当前应用名
URL 请求 URL
请求方法 HTTP 请求方法,GET 或 POST
请求次数 本段时间内请求次数
请求耗时 本段时间内的请求总耗时,以毫秒(ms)为单位
请求结果
  • Y:成功,HTTP 结果码以 1 或 2 开头,或结果码为 302 重定向
  • N:失败,其它 HTTP 结果码
压测标记
  • T:压测
  • F:非压测

样例:

  1. 2018-07-17 20:02:34.416,mvc-client,http://localhost:8080/greeting,GET,1,281,Y,F

HttpClient 日志

说明:本功能适用于 SOFABoot 2.5.0 及以上版本。

在 SOFABoot 工程中,您可以 引入 HttpClient 打印 Tracer 日志。HttpClient 日志包括以下两种类型:

HttpClient 摘要日志

HttpClient 摘要日志名为 httpclient-digest.log,包含以下信息:

字段 描述
时间戳 日志打印时间
应用名 当前应用名
TraceId 25 位的 TraceId
RpcId 调用链路的 RpcId
URL 请求 URL
HTTP 方法 请求 HTTP 方法(GET/POST/HEAD)
HTTP 返回状态码 根据实际情况显示(200/404/503)
Request Body 大小 HTTP Request 消息数据大小,以 byte 为单位
Response Body 大小 HTTP Response 消息数据大小,以 byte 为单位
请求耗时 处理请求耗时,以毫秒(ms)为单位
线程名 当前线程名
目标系统 目标系统名
系统穿透数据 以 key-value 格式记录,用于传送系统灾备信息等
穿透数据 以 key-value 格式记录

样例

  1. 2018-10-09 20:57:30.596,testSyncClient,0ad1348f14031796166311002,0.1,http://localhost:49685/httpclient,GET,200,0B,81B,154ms,AnonymousIoService-2,mark=T&uid=a2&

HttpClient 统计日志

HttpClient 统计日志名为 httpclient-stat.log,包含以下信息:

字段 描述
时间戳 日志打印时间
应用名 当前应用名
URL 请求 URL
请求方法 HTTP 请求方法
请求次数 本段时间内请求次数
请求耗时 本段时间内的请求总耗时,以毫秒(ms)为单位
请求结果
  • Y:成功
  • N:失败
压测标记
  • T:压测
  • F:非压测

样例

  1. 2018-10-09 20:57:30.596,testSyncClient,http://localhost:49685/httpclient,GET,1,275,Y,F

异常日志

默认情况下,异常日志都记录在 middleware_error.log 文件中。

通用异常日志基本格式

以下为异常日志记录的常见信息:

字段
描述
时间戳
日志生成时间(UTC+08:00)
TraceId
25 位的 TraceId。前 8 位表示服务器 IP,而后 13 位为生成 TraceId 的时间,后 4 位为自增序列。
RpcId
调用链路的 RpcId
故障类型
根据实际情况,显示相应故障类型
故障源
以数据形式表示故障源:
故障源1|故障源2|故障源3|…… 依次类推
故障上下文
以映射形式表示故障上下文:
fromUser=khotyn&toUser=nytohk&
异常 Stack
具体异常类型

样例:

  1. 2015-02-10 22:47:20.499,trade,q241234,0.1,timeout_error,trade|RPC,&protocol=&targetApp=&paramTypes=int|String&invokeType=&methodName=refund&targetUrl=&serviceName=RefundFacade&,,java.lang.Throwable
  2. at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:43)
  3. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  4. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  5. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  6. at java.lang.reflect.Method.invoke(Method.java:597)
  7. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
  8. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  9. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
  10. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
  11. at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
  12. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
  13. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
  14. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
  15. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)

中间件异常日志

中间件产品的异常日志格式与通用异常日志格式一致,唯一的区别是故障源的第一项为故障发生的集群,如下所示:

  1. 故障发生的集群 | 其他故障源1 | 其他故障源2

RPC 客户端异常日志

RPC 客户端的异常日志直接在中间件异常日志(middleware_error.log)中生成,其基本格式和中间件异常日志的格式一致,主要有以下区别:

  • 故障源的第二项为 RPC:故障发生的集群|RPC|其他故障源1|其他故障源2
  • 故障类型为以下几种:
    • biz_error:业务异常
    • address_route_error:地址路由异常
    • timeout_error:超时异常
    • unknown_error:未知异常
  • 故障上下文中有下列这些信息:
    • serviveName:服务名
    • methodName:方法名
    • protocal:协议
    • invokeType:调用类型
    • targetUrl:目标 URL
    • paramTypes:请求参数类型(value 的格式为 param1|param2

样例:

  1. 2015-02-10 22:47:20.499,trade,q241234,0.1,timeout_error,trade|RPC,&protocol=&targetApp=&paramTypes=int|String&invokeType=&methodName=refund&targetUrl=&serviceName=RefundFacade&,,java.lang.Throwable
  2. at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:43)
  3. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  4. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  5. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  6. at java.lang.reflect.Method.invoke(Method.java:597)
  7. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
  8. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  9. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
  10. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
  11. at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
  12. at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
  13. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
  14. at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
  15. at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)

RPC 服务端异常日志

RPC 服务端的异常日志直接在中间件异常日志(middleware_error.log)中生成,其基本格式和中间件异常日志的格式一致,主要有以下区别:

  • 故障源的第二项为 RPC:故障发生的集群|RPC|其他故障源1|其他故障源2
  • 故障类型为以下几种:
    • biz_error:业务异常
    • unknown_error:未知异常
  • 故障上下文中有下列这些信息:
    • serviveName:服务名
    • methodName:方法名
    • protocal:协议
    • invokeType:调用类型
    • callerUrl:调用方 URL
    • callerApp:调用方应用名
    • paramTypes:请求参数类型(value 的格式为 param1|param2

样例:

  1. 2015-02-10 22:47:20.505,trade,q241234,0.1,unknown_error,trade|RPC,protocol=&callerUrl=&paramTypes=int|String&callerApp=&invokeType=&methodName=refund&serviceName=RefundFacade&,,java.lang.Throwable
  2. at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:45)
  3. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  4. at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  5. at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  6. at java.lang.reflect.Method.invoke(Method.java:597)
  7. at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
  8. at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
  9. at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
  10. at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)