文档首页/ 对象存储服务 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();
        }
    }
}