全部产品

日志格式

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 数据

日志样例

{"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 不是压测

日志样例

{"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 数据

日志样例

{"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 不是压测

日志样例

{"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 数据

日志样例

{"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;
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 不是压测

日志样例

{"time":"2019-09-02 21:31:50.435","stat.key":{"local.app":"SOFATracerDataSource","database.name":"test","SQL":"DROP TABLE IF EXISTS TEST;
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 格式)

日志样例

{"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 格式)

日志样例

{"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)

日志样例

{"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)

日志样例

{"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 数据

日志样例

{"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 不是压测

日志样例

{"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 数据

日志样例

{"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 不是压测

日志样例

{"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 数据

日志样例

{"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 数据

日志样例

{"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

    {"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

    {"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 数据

日志样例

{"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 不是压测

日志样例

{"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 格式)

日志样例

2015-04-2717: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)

日志样例

2014-05-2119:18:52.484from,to,DummyService,dummyMethod,596,60041,Y,T

SOFAREST 日志

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

SOFAREST 客户端日志

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

字段

描述

时间戳

日志打印时间

应用名

当前应用名称

TraceId

25 位的 TraceId

RpcId

调用链路的 RpcId

URL

请求 URL

方法名

方法名称

目标应用

目标应用名称

目标地址

目标机器 IP 地址

结果码

返回结果码

请求大小

请求发送的数据大小,以 byte 为单位

响应大小

响应请求数据大小,以 byte 为单位

线程名

当前线程名

系统穿透数据

以 key-value 格式记录,用于传送系统灾备信息等

穿透数据

以 key-value 格式记录

日志样例

2015-11-0411: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 格式记录

日志样例

2015-11-0411: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,表示当前线程中获取不到日志上下文。

日志样例

2015-11-0411: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,表示当前线程中获取不到日志上下文。

日志样例

2015-11-0411: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 格式)

日志样例

2014-09-0100: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表示的重定向算成功,其他算是失败的)

  • 压测标记

日志样例

2014-09-0100: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
具体异常类型

日志样例

2015-02-1022: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
    at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)

中间件异常日志

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

故障发生的集群|其他故障源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

日志样例

2015-02-1022: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
    at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:43)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    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

日志样例

2015-02-1022: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
    at com.alipay.common.tracer.CommonTracerTest.testMiddleware(CommonTracerTest.java:45)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)

静态信息日志

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

  • 进程 ID

  • 当前 IP

  • 当前 Zone

日志样例

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. 创建主事务记录(事务发起)

2018-06-1117:37:13.151,SofabootAction,10.15.232.41,dtx,11.165.197.74,0a0fe829152870983309010015560,0.93b3fa8c,SofabootAction,start,24ms,Thread-6,true,,
说明

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

2. 创建分支事务记录

2018-06-1117: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. 分布式事务提交

2018-06-1117: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. 分布式事务回滚

2018-06-1117: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 格式记录

日志样例:

2018-10-1210: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,,
2018-10-1210: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 格式记录

日志样例

2015-04-3020:39:56.341,test,0a16191714303975963201001,0,1,21ms,main,

集群任务分发的统计日志

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

字段名称

描述

时间戳

日志打印时间

应用名

当前应用名称

TraceId

25 位的 TraceId

RpcId

调用链路的 RpcId

层次

表示三层分发的层次

被调用次数

本段时间内调用次数

请求处理总耗时

本段时间内的调用总耗时

结果

Y:成功N:失败

全链路压测标志

T:true,表示当前线程中能获取到日志上下文F:false,表示当前线程中获取不到日志上下文

日志样例

2015-04-3020:39:58.340,test,1,1,21,Y,F

集群任务接收的详细日志

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

字段名称

描述

时间戳

日志打印时间

应用名

当前应用名称

TraceId

25 位的 TraceId

RpcId

调用链路的 RpcId

层次

表示三层分发的层次

调用耗时

调用服务耗时,以 ms 为单位

线程名

当前线程名

穿透数据

以 key-value 格式记录

日志样例

2015-04-3020:39:58.358,test,0a16191714303975983561002,0,1,2ms,main,

集群任务接收的统计日志

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

字段名称

描述

时间戳

日志打印时间

应用名

当前应用名称

层次

表示三层分发的层次

被调用次数

本段时间内调用次数

请求处理总耗时

本段时间内的调用总耗时

结果

Y:成功N:失败

全链路压测标志

T:true,表示当前线程中能获取到日志上下文F:false,表示当前线程中获取不到日志上下文

日志样例

2015-04-3020:40:00.339,test,1,1,2,Y,F