文档首页/ 对象存储服务 OBS/ Java SDK开发指南(联盟区域)/ 常见问题(Java SDK)/ Java SDK如何配置OkhttpEventListener日志,打印详细阶段日志(Java SDK)
更新时间:2026-07-01 GMT+08:00
Java SDK如何配置OkhttpEventListener日志,打印详细阶段日志(Java SDK)
原理
通过okhttp的EventListener,可实现统计https各个过程的耗时。仅Java SDK 3.24.9版本后支持该功能,且配置OkhttpEventListener日志时会额外消耗性能,建议在调试时才开启该日志。
代码示例
import com.obs.services.ObsClient;
import com.obs.services.ObsConfiguration;
import com.obs.services.exception.ObsException;
import com.obs.services.internal.utils.OkhttpCallProfiler;
import java.io.ByteArrayInputStream;
public class PutObject001 {
public static void main(String[] args) {
// 您可以通过环境变量获取访问密钥AK/SK,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。
// 您可以登录访问管理控制台获取访问密钥AK/SK
String ak = System.getenv("ACCESS_KEY_ID");
String sk = System.getenv("SECRET_ACCESS_KEY_ID");
// 【可选】如果使用临时AK/SK和SecurityToken访问OBS,同样建议您尽量避免使用硬编码,以降低信息泄露风险。
// 您可以通过环境变量获取访问密钥AK/SK/SecurityToken,也可以使用其他外部引入方式传入。使用临时访问密钥调用接口可将下面一行的注释取消。
// String securityToken = System.getenv("SECURITY_TOKEN");
// endpoint填写桶所在区域的endpoint。
String endPoint = "https://your-endpoint";
// 您可以通过环境变量获取endPoint,也可以使用其他外部引入方式传入。
//String endPoint = System.getenv("ENDPOINT");
ObsConfiguration obsConfiguration = new ObsConfiguration();
obsConfiguration.setEndPoint(endPoint);
// 打印OkhttpCall统计日志到System.out::println,可以替换为其他函数
// obsConfiguration.setEventListenerFactory(call -> new OkhttpCallProfiler(System.out::println));
// 打印OkhttpCall统计日志到sdk的log4j日志
obsConfiguration.setEventListenerFactory(call -> new OkhttpCallProfiler());
// 创建ObsClient实例
try (ObsClient obsClient = new ObsClient(ak, sk, obsConfiguration)) {
// 上传字符串(byte数组)
String content = "Hello OBS";
String objKey = "objectkey.webp";
String bucket = "examplebucket";
obsClient.putObject(bucket, objKey, new ByteArrayInputStream(content.getBytes()));
System.out.println(obsClient.getObjectMetadata(bucket,objKey).getContentType());
System.out.println("putObject successfully");
} catch (ObsException e) {
System.out.println("putObject failed");
// 请求失败,打印http状态码
System.out.println("HTTP Code:" + e.getResponseCode());
// 请求失败,打印服务端错误码
System.out.println("Error Code:" + e.getErrorCode());
// 请求失败,打印详细错误信息
System.out.println("Error Message:" + e.getErrorMessage());
// 请求失败,打印请求id
System.out.println("Request ID:" + e.getErrorRequestId());
System.out.println("Host ID:" + e.getErrorHostId());
e.printStackTrace();
} catch (Exception e) {
System.out.println("putObject failed");
// 其他异常信息打印
e.printStackTrace();
}
}
} 父主题: 常见问题(Java SDK)