全部产品

日志格式

更新时间:2020-09-09 19:30:01

SOFATracer 支持 Spring MVC、标准 JDBC 接口实现的数据库连接池(DBCP、Druid、c3p0、tomcat、HikariCP、BoneCP)、HttpClient、Dubbo、Spring Cloud OpenFeign 等开源组件。组件埋点接入后,即可查看相关 Tracer 日志。本文将介绍如下几种日志及其日志格式。

Spring MVC 日志

SOFATracer 集成 SpringMVC 后输出 MVC 请求的链路数据格式,默认为 JSON 数据格式。

Spring MVC 摘要日志

spring-mvc-digest.log 是 Spring MVC 摘要日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
local.app 当前应用名
traceId TraceId
spanId SpanId
span.kind Span 类型
result.code 状态码
current.thread.name 当前线程名
time.cost.milliseconds span 耗时
request.url 请求地址
method http method
req.size.bytes 请求大小
resp.size.bytes 响应大小
sys.baggage 系统透传的 baggage 数据
biz.baggage 业务透传的 baggage 数据

日志样例

  1. {"time":"2019-09-03 10:33:10.336","local.app":"RestTemplateDemo","traceId":"0a0fe9271567477985327100211176","spanId":"0.1","span.kind":"server","result.code":"200","current.thread.name":"http-nio-8801-exec-2","time.cost.milliseconds":"5006ms","request.url":"http://localhost:8801/asyncrest","method":"GET","req.size.bytes":-1,"resp.size.bytes":0,"sys.baggage":"","biz.baggage":""}

Spring MVC 统计日志

spring-mvc-stat.log 是 Spring MVC 统计日志。其中,stat.key 即本段时间内的统计关键字集合,统一关键字集合唯一确定一组统计数据,包含 local.app、request.url、和 method 字段.

key 表达含义
time 日志打印时间
stat.key local.app 当前应用名
request.url 请求 URL
method 请求 HTTP 方法
count 本段时间内请求次数
total.cost.milliseconds 本段时间内的请求总耗时(ms)
success 请求结果:Y 表示成功(1 开头和 2 开头的结果码算是成功的,302 表示的重定向算成功,其他算是失败的);N 表示失败
load.test 压测标记:T 是压测;F 不是压测

日志样例

  1. {"time":"2019-09-03 10:34:04.129","stat.key":{"method":"GET","local.app":"RestTemplateDemo","request.url":"http://localhost:8801/asyncrest"},"count":1,"total.cost.milliseconds":5006,"success":"true","load.test":"F"}

HttpClient 日志

SOFATracer 集成 sofa-tracer-httpclient-plugin 插件后输出 HttpClient 请求的链路数据,默认为 JSON 数据格式。

HttpClient 摘要日志

httpclient-digest.log 是 HttpClient 摘要日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
local.app 当前应用名
traceId TraceId
spanId SpanId
span.kind Span 类型
result.code 状态码
current.thread.name 当前线程名
time.cost.milliseconds span 耗时
request.url 请求地址
method http method
req.size.bytes 请求大小
resp.size.bytes 响应大小
sys.baggage 系统透传的 baggage 数据
biz.baggage 业务透传的 baggage 数据

日志样例

  1. {"time":"2019-09-02 23:43:13.191","local.app":"HttpClientDemo","traceId":"1e27a79c1567438993170100210107","spanId":"0","span.kind":"client","result.code":"200","current.thread.name":"I/O dispatcher 1","time.cost.milliseconds":"21ms","request.url":"http://localhost:8080/httpclient","method":"GET","req.size.bytes":0,"resp.size.bytes":-1,"remote.app":"","sys.baggage":"","biz.baggage":""}

说明:应用名称可以通过 SofaTracerHttpClientBuilder 构造 HttpClient 实例时以入参的形式传入。

HttpClient 统计日志

httpclient-stat.log 是 HttpClient 统计日志。其中,stat.key 即本段时间内的统计关键字集合,统一关键字集合唯一确定一组统计数据,包含 local.app、request.url、和 method 字段.

key 表达含义
time 日志打印时间
stat.key local.app 当前应用名
request.url 请求 URL
method 请求 HTTP 方法
count 本段时间内请求次数
total.cost.milliseconds 本段时间内的请求总耗时(ms)
success 请求结果:Y 表示成功(1 开头和 2 开头的结果码算是成功的,302 表示的重定向算成功,其他算是失败的);N 表示失败
load.test 压测标记:T 是压测;F 不是压测

日志样例

  1. {"time":"2019-09-02 23:44:11.785","stat.key":{"method":"GET","local.app":"HttpClientDemo","request.url":"http://localhost:8080/httpclient"},"count":2,"total.cost.milliseconds":229,"success":"true","load.test":"F"}

DataSource 日志

SOFATracer 对标准的 JDBC 数据源进行埋点,输出 SQL 语句执行链路数据,默认日志输出为 JSON 数据格式。

DataSource 摘要日志

datasource-client-digest.log 是 DataSource 摘要日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
local.app 当前应用名
traceId TraceId
spanId SpanId
span.kind Span 类型
result.code 状态码
current.thread.name 当前线程名
time.cost.milliseconds span 耗时
database.name 数据库名称
sql sql执行语句
connection.establish.span sql执行建连时间
db.execute.cost sql执行时间
database.type 数据库类型
database.endpoint 数据库url
sys.baggage 系统透传的 baggage 数据
biz.baggage 业务透传的 baggage 数据

日志样例

  1. {"time":"2019-09-02 21:31:31.566","local.app":"SOFATracerDataSource","traceId":"0a0fe91d156743109138810017302","spanId":"0.1","span.kind":"client","result.code":"00","current.thread.name":"http-nio-8080-exec-1","time.cost.milliseconds":"15ms","database.name":"test","sql":"DROP TABLE IF EXISTS TEST;
  2. CREATE TABLE TEST(ID INT PRIMARY KEY%2C NAME VARCHAR(255));","connection.establish.span":"128ms","db.execute.cost":"15ms","database.type":"h2","database.endpoint":"jdbc:h2:~/test:-1","sys.baggage":"","biz.baggage":""}

DataSource 统计日志

datasource-client-stat.log 是 DataSource 统计日志。其中,stat.key 即本段时间内的统计关键字集合,统一关键字集合唯一确定一组统计数据,包含 local.app、database.name、和 sql 字段.

key 表达含义
time 日志打印时间
stat.key local.app 当前应用名
database.name 数据库名称
sql sql执行语句
count 本段时间内sql执行次数
total.cost.milliseconds 本段时间内sql执行总耗时(ms)
success 请求结果:Y 表示成功;N 表示失败
load.test 压测标记:T 是压测;F 不是压测

日志样例

  1. {"time":"2019-09-02 21:31:50.435","stat.key":{"local.app":"SOFATracerDataSource","database.name":"test","sql":"DROP TABLE IF EXISTS TEST;
  2. CREATE TABLE TEST(ID INT PRIMARY KEY%2C NAME VARCHAR(255));"},"count":1,"total.cost.milliseconds":15,"success":"true","load.test":"F"}

SOFARPC 日志

SOFATracer 集成在 SOFARPC(5.4.0 及之后的版本)后输出链路数据的格式,默认为 JSON 数据格式。

RPC 客户端摘要日志

rpc-client-digest.log 是 RPC 客户端摘要日志。相应 key 的含义解释如下:

key 表达含义
timestamp 日志打印时间
tracerId TraceId
spanId SpanId
span.kind Span 类型
local.app 当前 appName
protocol 协议(bolt/rest)
service 服务接口信息
method 方法名
current.thread.name 当前线程名
invoke.type 调用类型(sync/callback/oneway/future)
router.record 路由记录(DIRECT/REGISTRY)
remote.ip 目标 ip
remote.app 目标 appName
local.client.ip 本机 ip
result.code 返回码(00=成功/01=业务异常/02=RPC逻辑错误/03=超时失败/04=路由失败)
req.serialize.time 请求序列化时间(单位 ms)
resp.deserialize.time 响应反序列化时间(单位 ms)
resp.size 响应大小(单位 Byte)
req.size 请求大小(单位 Byte)
client.conn.time 客户端连接耗时(单位 ms)
client.elapse.time 调用总耗时(单位 ms)
local.client.port 本地客户端端口
baggage 透传的 baggage 数据(kv 格式)

日志样例

  1. {"timestamp":"2018-05-20 17:03:20.708","tracerId":"1e27326d1526807000498100185597","spanId":"0","span.kind":"client","local.app":"SOFATracerRPC","protocol":"bolt","service":"com.alipay.sofa.tracer.examples.sofarpc.direct.DirectService:1.0","method":"sayDirect","current.thread.name":"main","invoke.type":"sync","router.record":"DIRECT","remote.app":"samples","remote.ip":"127.0.0.1:12200","local.client.ip":"127.0.0.1","result.code":"00","req.serialize.time":"33","resp.deserialize.time":"39","resp.size":"170","req.size":"582","client.conn.time":"0","client.elapse.time":"155","local.client.port":"59774","baggage":""}

RPC 服务端摘要日志

rpc-server-digest.log 是 RPC 服务端摘要日志。相应 key 的含义解释如下:

key 表达含义
timestamp 日志打印时间
tracerId TraceId
spanId SpanId
span.kind Span 类型
service 服务接口信息
method 方法名
remote.ip 来源 ip
remote.app 来源 appName
protocol 协议(bolt/rest)
local.app 当前 appName
current.thread.name 当前线程名
result.code 返回码(00=成功/01=业务异常/02=RPC逻辑错误)
server.pool.wait.time 服务端线程池等待时间(单位 ms)
biz.impl.time 业务处理耗时(单位 ms)
resp.serialize.time 响应序列化时间(单位 ms)
req.deserialize.time 请求反序列化时间(单位 ms)
resp.size 响应大小(单位 Byte)
req.size 请求大小(单位 Byte)
baggage 透传的 baggage 数据(kv 格式)

日志样例

  1. {"timestamp":"2018-05-20 17:00:53.312","tracerId":"1e27326d1526806853032100185011","spanId":"0","span.kind":"server","service":"com.alipay.sofa.tracer.examples.sofarpc.direct.DirectService:1.0","method":"sayDirect","remote.ip":"127.0.0.1","remote.app":"SOFATracerRPC","protocol":"bolt","local.app":"SOFATracerRPC","current.thread.name":"SOFA-BOLT-BIZ-12200-5-T1","result.code":"00","server.pool.wait.time":"3","biz.impl.time":"0","resp.serialize.time":"4","req.deserialize.time":"38","resp.size":"170","req.size":"582","baggage":""}

RPC 客户端统计日志

rpc-client-stat.log 是 RPC 客户端统计日志。相应 key 的含义解释如下:| key | 表达含义 || ——————————— | —————————- || time | 日志打印时间 || stat.key | 日志关键 key ||method | 方法信息 ||local.app | 客户端 appName || service | 服务接口信息 || count | 调用次数 ||total.cost.milliseconds | 总耗时(单位 ms) || success | 调用结果(Y/N) |

日志样例

  1. {"time":"2018-05-18 07:02:19.717","stat.key":{"method":"method","local.app":"client","service":"app.service:1.0"},"count":10,"total.cost.milliseconds":17,"success":"Y"}

RPC 服务端统计日志

rpc-server-stat.log 是 RPC 服务端统计日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
stat.key 日志关键 key
method 方法信息
local.app 客户端 appName
service 服务接口信息
count 调用次数
total.cost.milliseconds 总耗时(单位 ms)
success 调用结果(Y/N)

日志样例

  1. {"time":"2018-05-18 07:02:19.717","stat.key":{"method":"method","local.app":"client","service":"app.service:1.0"},"count":10,"total.cost.milliseconds":17,"success":"Y"}

OkHttp 日志

SOFATracer 集成 OkHttp 后输出请求的链路数据格式,默认为 JSON 数据格式。

OkHttp 摘要日志

okhttp-digest.log 是 OkHttp 摘要日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
local.app 当前应用名
traceId TraceId
spanId SpanId
request.url 请求 URL
method 请求 HTTP 方法
result.code HTTP 返回状态码
req.size.bytes Request Body 大小
resp.size.bytes Response Body 大小
time.cost.milliseconds 请求耗时(ms)
current.thread.name 当前线程名
remote.app 目标应用
baggage 透传的 baggage 数据

日志样例

  1. {"time":"2019-09-03 11:35:28.429","local.app":"OkHttpDemo","traceId":"0a0fe9271567481728265100112783","spanId":"0","span.kind":"client","result.code":"200","current.thread.name":"main","time.cost.milliseconds":"164ms","request.url":"http://localhost:8081/okhttp?name=sofa","method":"GET","result.code":"200","req.size.bytes":0,"resp.size.bytes":0,"remote.app":"","sys.baggage":"","biz.baggage":""}

OkHttp 统计日志

okhttp-stat.log 是 OkHttp 统计日志。其中,stat.key 即本段时间内的统计关键字集合,统一关键字集合唯一确定一组统计数据,包含 local.app、request.url、和 method 字段.

key 表达含义
time 日志打印时间
stat.key local.app 当前应用名
request.url 请求 URL
method 请求 HTTP 方法
count 本段时间内请求次数
total.cost.milliseconds 本段时间内的请求总耗时(ms)
success 请求结果:Y 表示成功;N 表示失败
load.test 压测标记:T 是压测;F 不是压测

日志样例

  1. {"time":"2019-09-03 11:43:06.975","stat.key":{"method":"GET","local.app":"OkHttpDemo","request.url":"http://localhost:8081/okhttp?name=sofa"},"count":1,"total.cost.milliseconds":174,"success":"true","load.test":"F"}

RestTemplate 日志

SOFATracer 集成 RestTemplate 后输出请求的链路数据格式,默认为 JSON 数据格式。

RestTemplate 摘要日志

resttemplate-digest.log 是 RestTemplate 摘要日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
local.app 当前应用名
traceId TraceId
spanId SpanId
span.kind Span 类型
result.code 状态码
current.thread.name 当前线程名
time.cost.milliseconds span 耗时
request.url 请求地址
method http method
req.size.bytes 请求大小
resp.size.bytes 响应大小
sys.baggage 系统透传的 baggage 数据
biz.baggage 业务透传的 baggage 数据

日志样例

  1. {"time":"2019-09-03 10:33:10.336","local.app":"RestTemplateDemo","traceId":"0a0fe9271567477985327100211176","spanId":"0","span.kind":"client","result.code":"200","current.thread.name":"SimpleAsyncTaskExecutor-1","time.cost.milliseconds":"5009ms","request.url":"http://localhost:8801/asyncrest","method":"GET","req.size.bytes":0,"resp.size.bytes":0,"sys.baggage":"","biz.baggage":""}

RestTemplate 统计日志

resttemplate-stat.log 是 RestTemplate 统计日志。其中,stat.key 即本段时间内的统计关键字集合,统一关键字集合唯一确定一组统计数据,包含 local.app、request.url、和 method 字段.

key 表达含义
time 日志打印时间
stat.key local.app 当前应用名
request.url 请求 URL
method 请求 HTTP 方法
count 本段时间内请求次数
total.cost.milliseconds 本段时间内的请求总耗时(ms)
success 请求结果:Y 表示成功;N 表示失败
load.test 压测标记:T 是压测;F 不是压测

日志样例

  1. {"time":"2019-09-03 10:34:04.130","stat.key":{"method":"GET","local.app":"RestTemplateDemo","request.url":"http://localhost:8801/asyncrest"},"count":1,"total.cost.milliseconds":5009,"success":"true","load.test":"F"}

Dubbo 日志

SOFATracer 集成 Dubbo 后输出请求的链路数据格式,默认为 JSON 数据格式。

Dubbo 服务消费方摘要日志

dubbo-client-digest.log 是 Dubbo 服务消费方摘要日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
local.app 当前应用名
traceId TraceId
spanId SpanId
span.kind Span 类型
result.code 状态码
current.thread.name 当前线程名
time.cost.milliseconds span 耗时
protocol 协议
service 服务接口
method 调用方法
invoke.type 调用类型
remote.host 目标主机
remote.port 目标端口
local.host 本地主机
client.serialize.time 请求序列化时间
client.deserialize.time 响应反序列化时间
req.size.bytes Request Body 大小
resp.size.bytes Response Body 大小
error 错误信息
sys.baggage 系统透传的 baggage 数据
biz.baggage 业务透传的 baggage 数据

日志样例

  1. {"time":"2019-09-02 23:36:08.250","local.app":"dubbo-consumer","traceId":"1e27a79c156743856804410019644","spanId":"0","span.kind":"client","result.code":"00","current.thread.name":"http-nio-8080-exec-2","time.cost.milliseconds":"205ms","protocol":"dubbo","service":"com.glmapper.bridge.boot.service.HelloService","method":"SayHello","invoke.type":"sync","remote.host":"192.168.2.103","remote.port":"20880","local.host":"192.168.2.103","client.serialize.time":35,"client.deserialize.time":5,"req.size.bytes":336,"resp.size.bytes":48,"error":"","sys.baggage":"","biz.baggage":""}

Dubbo 服务提供方摘要日志

dubbo-server-digest.log 是 Dubbo 服务提供方摘要日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
local.app 当前应用名
traceId TraceId
spanId SpanId
span.kind Span 类型
result.code 状态码
current.thread.name 当前线程名
time.cost.milliseconds span 耗时
protocol 协议
service 服务接口
method 调用方法
invoke.type 调用类型
local.host 本地主机
local.port 本地端口
server.serialize.time 响应序列化时间
server.deserialize.time 请求反序列化时间
req.size.bytes Request Body 大小
resp.size.bytes Response Body 大小
error 错误信息
sys.baggage 系统透传的 baggage 数据
biz.baggage 业务透传的 baggage 数据

日志样例

  1. {"time":"2019-09-02 23:36:08.219","local.app":"dubbo-provider","traceId":"1e27a79c156743856804410019644","spanId":"0","span.kind":"server","result.code":"00","current.thread.name":"DubboServerHandler-192.168.2.103:20880-thread-2","time.cost.milliseconds":"9ms","protocol":"dubbo","service":"com.glmapper.bridge.boot.service.HelloService","method":"SayHello","local.host":"192.168.2.103","local.port":"62443","server.serialize.time":0,"server.deserialize.time":27,"req.size.bytes":336,"resp.size.bytes":0,"error":"","sys.baggage":"","biz.baggage":""}

Dubbo 统计日志

dubbo-client-stat.logdubbo-server-stat.log 是 Dubbo 统计日志。其中,stat.key 即本段时间内的统计关键字集合,统一关键字集合唯一确定一组统计数据,包含 local.app、service、和 method 字段.

key 表达含义
time 日志打印时间
stat.key local.app 当前应用名
method 调用方法
service 服务名
count 本段时间内请求次数
total.cost.milliseconds 本段时间内的请求总耗时(ms)
success 请求结果:Y 表示成功;N 表示失败
load.test 压测标记:T 是压测;F 不是压测

日志样例

  • dubbo-client-stat.log
    1. {"time":"2019-09-02 23:36:13.040","stat.key":{"method":"SayHello","local.app":"dubbo-consumer","service":"com.glmapper.bridge.boot.service.HelloService"},"count":1,"total.cost.milliseconds":205,"success":"true","load.test":"F"}
  • dubbo-server-stat.log
    1. {"time":"2019-09-02 23:36:13.208","stat.key":{"method":"SayHello","local.app":"dubbo-provider","service":"com.glmapper.bridge.boot.service.HelloService"},"count":1,"total.cost.milliseconds":9,"success":"true","load.test":"F"}

Spring Cloud OpenFeign 日志

SOFATracer 集成 Spring Cloud OpenFeign 后输出请求的链路数据格式,默认为 JSON 数据格式。

Spring Cloud OpenFeign 摘要日志

feign-digest.log 是 Spring Cloud OpenFeign 摘要日志。以 JSON 格式输出的数据,相应 key 的含义解释如下:

key 表达含义
time 日志打印时间
local.app 当前应用名
traceId TraceId
spanId SpanId
span.kind Span 类型
result.code 状态码
current.thread.name 当前线程名
time.cost.milliseconds span 耗时
request.url 请求地址
method http method
error 错误信息
req.size.bytes 请求大小
resp.size.bytes 响应大小
sys.baggage 系统透传的 baggage 数据
biz.baggage 业务透传的 baggage 数据

日志样例

  1. {"time":"2019-09-03 10:28:52.363","local.app":"tracer-consumer","traceId":"0a0fe9271567477731347100110969","spanId":"0.1","span.kind":"client","result.code":"200","current.thread.name":"http-nio-8082-exec-1","time.cost.milliseconds":"219ms","request.url":"http://10.15.233.39:8800/feign","method":"GET","error":"","req.size.bytes":0,"resp.size.bytes":18,"remote.host":"10.15.233.39","remote.port":"8800","sys.baggage":"","biz.baggage":""}

Spring Cloud OpenFeign 统计日志

feign-stat.log 是 Spring Cloud OpenFeign 统计日志。其中,stat.key 即本段时间内的统计关键字集合,统一关键字集合唯一确定一组统计数据,包含 local.app、request.url、和 method 字段。

key 表达含义
time 日志打印时间
stat.key local.app 当前应用名
request.url 请求 URL
method 请求 HTTP 方法
count 本段时间内请求次数
total.cost.milliseconds 本段时间内的请求总耗时(ms)
success 请求结果:Y 表示成功;N 表示失败
load.test 压测标记:T 是压测;F 不是压测

日志样例

  1. {"time":"2019-09-03 10:29:34.528","stat.key":{"method":"GET","local.app":"tracer-consumer","request.url":"http://10.15.233.39:8800/feign"},"count":2,"total.cost.milliseconds":378,"success":"true","load.test":"F"}

RPC 转 JVM 日志

RPC 转 JVM 详细日志

在 1.0.16 的 Tracer 版本中,Tracer 增加了合并部署的 RPC 转 JVM 的详细日志 rpc-2-jvm-digest.log,日志格式如下:

  • 日志打印时间
  • 当前应用名
  • TraceId
  • RpcId
  • 服务名
  • 方法名
  • 目标系统名
  • 调用耗时
  • 当前线程名
  • 系统穿透数据(kv 格式,用于传送系统灾备信息等)
  • 穿透数据(kv 格式)

日志样例

  1. 2015-04-27 17:51:47.711,test,0a0f61eb14301283076901001,0,com.alipay.SampleService,hello,testTarget,21ms,main,

说明:默认的情况下,RPC 转 JVM 的详细日志是关闭的,需要通过 DRM 推送来打开,详见 Tracer 的 DRM 说明

RPC 转 JVM 调用统计日志

rpc-2-jvm-stat.log 是 RPC 转 JVM 调用统计日志,每一分钟打印一次。

  • 日志打印时间
  • fromApp(即 currentApp)
  • toApp
  • 服务名
  • 方法名
  • 本段时间内调用次数
  • 本段时间内的调用总耗时
  • 结果(Y/N,rpc-2-jvm 没有统计结果,所有的都是 Y)
  • 全链路压测标志 (T/F)

日志样例

  1. 2014-05-21 19:18:52.484 from,to,DummyService,dummyMethod,596,60041,Y,T

SOFARest 日志

SOFAREST 日志

每一次 SOFAREST 调用会生成相应的客户端和服务端执行日志。

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

SOFA MVC 日志

SOFA MVC 摘要日志

sofa-mvc-digest.log 是 SOFA MVC 摘要日志。日志格式如下:

  • 日志打印时间
  • 当前应用名
  • TraceId
  • RpcId
  • 请求 URL
  • 请求方法
  • Http 状态码
  • Request Body 大小
  • Response Body 大小
  • 请求耗时(MS)
  • 当前线程名
  • 穿透数据 (kv格式)

日志样例

  1. 2014-09-01 00:00:01.631,tbapi,0ad643e114095008015728852,0,http://tbapi.alipay.com/gateway.do,POST,200,1468B,2161B,59ms,catalina-exec-71,uid=13&mark=F&

SOFA MVC 统计日志

sofa-mvc-stat.log 是 SOFA MVC 统计日志。日志格式如下:

  • 日志打印时间
  • 当前应用名
  • 请求 URL
  • 请求方法
  • 本段时间内请求次数
  • 本段时间内的请求总耗时
  • 请求结果(1 开头和 2 开头的结果码算是成功的,302表示的重定向算成功,其他算是失败的)
  • 压测标记

日志样例

  1. 2014-09-01 00:03:22.559,tbapi,http://tbapi.alipay.com/trade/batch_payment.htm,GET,2,11,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)

静态信息日志

Tracer 静态信息日志 static-info.log 会在启动的时候将当期进程的一些静态信息打印出来,目前日志格式如下:

  • 进程 ID
  • 当前 IP
  • 当前 Zone

日志样例

  1. 84919,10.15.233.110,GZ001

分布式事务日志

每一次调用分布式事务服务,会生成相应的客户端和服务端执行日志。

分布式事务客户端日志

分布式事务客户端日志记录在 ~/logs/tracelog/dtx-client-digest.log 文件中。日志主要包含以下信息:

字段名称 描述
时间戳 日志打印时间
本地应用名 本地应用的名称
本地应用地址 本地应用的 IP 地址
远程应用名 远程应用的名称
远程应用地址 远程应用的 IP 地址
TraceId 29 位的 TraceId
RpcId 调用链路的 RpcId
服务 服务名称
方法 方法名称
执行耗时 执行耗时,以 ms 为单位
线程名 当前线程名称
结果 执行结果:true/false
系统穿透数据 以 key-value 格式记录
穿透数据 以 key-value 格式记录

日志样例

1. 创建主事务记录(事务发起)

  1. 2018-06-11 17:37:13.151,SofabootAction,10.15.232.41,dtx,11.165.197.74,0a0fe829152870983309010015560,0.93b3fa8c,SofabootAction,start,24ms,Thread-6,true,,

说明:发起分布式事务时,没有“服务名称”,此处的“服务名称”是发起方所在应用的名称。

2. 创建分支事务记录

  1. 2018-06-11 17:37:13.686,SofabootAction,10.15.232.41,dtx,11.165.197.74,0a0fe829152870983309010015560,0.93b3fa8c,tcc_first_action_ds,prepare,22ms,Thread-6,true,,dtx_id=7bb4518951fc4255b68a0eb1cfbad6ef01-0000000000&

说明:创建分支事务记录时,此处的“服务名称”是参与者资源的 ID。

3. 分布式事务提交

  1. 2018-06-11 17:37:14.056,SofabootAction,10.15.232.41,dtx,11.165.197.74,0a0fe829152870983309010015560,0.93b3fa8c,SofabootAction,commit,19ms,Thread-6,true,,dtx_id=7bb4518951fc4255b68a0eb1cfbad6ef01-0000000000&

说明:提交分布式事务时,没有“服务名称”,此处的“服务名称”是发起方所在应用的名称。

4. 分布式事务回滚

  1. 2018-06-11 17:37:14.056,SofabootAction,10.15.232.41,dtx,11.165.197.74,0a0fe829152870983309010015560,0.93b3fa8c,SofabootAction,rollback,19ms,Thread-6,true,,dtx_id=7bb4518951fc4255b68a0eb1cfbad6ef01-0000000000&

说明:回滚分布式事务时,没有“服务名称”,此处的“服务名称”是发起方所在应用的名称。

分布式事务服务端日志

分布式事务服务端日志记录在 ~/logs/tracelog/dtx-server-digest.log 文件中。日志主要包含以下信息:

字段名称 描述
时间戳 日志打印时间
本地应用名 本地应用的名称
远程应用名 远程应用的名称
TraceId 29 位的 TraceId
RpcId 调用链路的 RpcId
资源 ID 资源的 ID
方法 方法名称
远程服务端 IP 远程服务端的 IP 地址
执行耗时 执行耗时,以 ms 为单位
线程名 当前线程的名称
结果 执行结果:true/false
系统穿透数据 以 key-value 格式记录
穿透数据 以 key-value 格式记录

日志样例:

  1. 2018-10-12 10:31:15.438,account-demo,dtx,0a0fe927153931147465010011267,0.93b3fa8c.93b3fa8c.93b3fa8c.93b3fa8c,second_dtx_datasource,commit,11.165.197.74:14200,8ms,dtx-bolt-pool-3,true,,
  1. 2018-10-12 10:31:15.571,account-demo,dtx,0a0fe927153931147465010011267,0.93b3fa8c.93b3fa8c.93b3fa8c.93b3fa8c.93b3fa8c.93b3fa8c.93b3fa8c.93b3fa8c,IN_JVM&SecondTccAction&&,commit,11.165.197.74:14200,4ms,dtx-bolt-pool-5,true,,

任务调度日志

每一次调用任务调度服务会生成相应的任务分发和接收日志。

集群任务分发的详细日志

集群任务分发的详细日志,即记录一层以及二层将任务分发给各自下一层的详细执行日志。其日志名为 scheduler-send-digest.log,包含以下信息:

字段名称 描述
时间戳 日志打印时间
应用名 当前应用名称
TraceId 25 位的 TraceId
RpcId 调用链路的 RpcId
层次 表示三层分发的层次
调用耗时 调用服务耗时,以 ms 为单位
线程名 当前线程名
系统穿透数据 以 key-value 格式记录,用于传送系统灾备信息等
穿透数据 以 key-value 格式记录

日志样例

  1. 2015-04-30 20:39:56.341,test,0a16191714303975963201001,0,1,21ms,main,

集群任务分发的统计日志

集群任务分发的统计日志,即记录一层以及二层将任务分发给各自下一层的统计日志。其日志名为 scheduler-send-stat.log,包含以下信息:

字段名称 描述
时间戳 日志打印时间
应用名 当前应用名称
TraceId 25 位的 TraceId
RpcId 调用链路的 RpcId
层次 表示三层分发的层次
被调用次数 本段时间内调用次数
请求处理总耗时 本段时间内的调用总耗时
结果 Y:成功
N:失败
全链路压测标志 T:true,表示当前线程中能获取到日志上下文
F:false,表示当前线程中获取不到日志上下文

日志样例

  1. 2015-04-30 20:39:58.340,test,1,1,21,Y,F

集群任务接收的详细日志

集群任务接收的详细日志,即记录二层以及三层分别接收各自前一层任务的详细执行日志。其日志名为 scheduler-receive-digest.log,包含以下信息:

字段名称 描述
时间戳 日志打印时间
应用名 当前应用名称
TraceId 25 位的 TraceId
RpcId 调用链路的 RpcId
层次 表示三层分发的层次
调用耗时 调用服务耗时,以 ms 为单位
线程名 当前线程名
穿透数据 以 key-value 格式记录

日志样例

  1. 2015-04-30 20:39:58.358,test,0a16191714303975983561002,0,1,2ms,main,

集群任务接收的统计日志

集群任务接收的统计日志,即记录二层以及三层分别接收各自前一层前一层任务的统计日志。其日志名为 scheduler-receive-stat.log,包含以下信息:

字段名称 描述
时间戳 日志打印时间
应用名 当前应用名称
层次 表示三层分发的层次
被调用次数 本段时间内调用次数
请求处理总耗时 本段时间内的调用总耗时
结果 Y:成功
N:失败
全链路压测标志 T:true,表示当前线程中能获取到日志上下文
F:false,表示当前线程中获取不到日志上下文

日志样例

  1. 2015-04-30 20:40:00.339,test,1,1,2,Y,F