Java 版 Rapid SDK 中的日志记录
Java 版 Rapid SDK 不针对客户端强加日志记录框架,而是支持通过 SLF4J 接口实现日志记录。SLF4J 用作各种日志记录框架的抽象,允许客户端在构建项目时插入想要的实现。
如果没有插入日志记录框架,SDK (SLF4J) 默认为无操作,丢弃所有日志请求并显示一条警告消息:
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".\
SLF4J: Defaulting to no-operation (NOP) logger implementation\
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
声明项目依赖项
客户端可以将特定的日志记录框架声明为项目依赖项,以将其插入。根据设计,SLF4J 一次只能使用一个框架,如果发现多个框架,会发出警告消息。
Simple logger
Java Util logging
Logback
Log4j2
日志格式
日志记录框架支持自定义日志记录格式和布局。在日志记录事件起源处列明时间戳和记录器名称等详细信息有助于排除 SDK 的故障。此外,日志消息使用前缀 ExpediaGroupSDK
进行注释,可以根据前缀进行筛除。
13:36:59.287 [DefaultDispatcher-worker-1] INFO c.e.s.c.c.c.ConfigurationCollector MDC= - ExpediaSDK: Successfully loaded [endpoint] from [runtime configuration]
日志级别
如果您想要跟踪 SDK 发出和接收的请求和响应数据,可以将日志级别设置为 INFO,这样就可以记录包括标头和正文内容在内的请求和响应数据;不过,这可能会产生大量日志数据。将日志级别设置为 WARN 或 ERROR 只会记录异常和错误,但仍会包含一个事务 ID,以便您可以在出现意外行为时与 Expedia Group 分享。
如果您正在排除故障,可以将日志级别设置为 DEBUG,以获得有关请求和响应的更多详细信息。DEBUG 级别的日志包括更详细的 OkHttp 客户端事件日志和事务 ID。
DEBUG 级别的日志消息示例:
17:40:08.490 [DefaultDispatcher-worker-3] DEBUG com.expediagroup.sdk.core.client.OkHttpEventListener - ExpediaSDK: Call start for transaction-id: [aff4c00d-6f79-4690-8f60-dd1aaccbfaee]
17:40:08.496 [OkHttp https://test.ean.com/...] DEBUG com.expediagroup.sdk.core.client.OkHttpEventListener - ExpediaSDK: Connect start for transaction-id: [aff4c00d-6f79-4690-8f60-dd1aaccbfaee]
17:40:08.508 [OkHttp https://test.ean.com/...] DEBUG com.expediagroup.sdk.core.client.OkHttpEventListener - ExpediaSDK: Connect end for transaction-id: [aff4c00d-6f79-4690-8f60-dd1aaccbfaee]
17:40:08.508 [OkHttp https://test.ean.com/...] DEBUG com.expediagroup.sdk.core.client.OkHttpEventListener - ExpediaSDK: Connection acquired for transaction-id: [aff4c00d-6f79-4690-8f60-dd1aaccbfaee]
17:40:08.510 [OkHttp https://test.ean.com/...] DEBUG com.expediagroup.sdk.core.client.OkHttpEventListener - ExpediaSDK: Sending request headers start for transaction-id: [aff4c00d-6f79-4690-8f60-dd1aaccbfaee]
17:40:08.510 [OkHttp https://test.ean.com/...] DEBUG com.expediagroup.sdk.core.client.OkHttpEventListener - ExpediaSDK: Sending request headers end for transaction-id: [aff4c00d-6f79-4690-8f60-dd1aaccbfaee]
可追溯性
SDK 会为每个 API 调用生成一个唯一的 transaction ID
,这有助于通过端到端跟踪请求来排除故障。事务 ID 会添加到请求和响应标头中,并在发生异常时记录在错误消息中。