本文介绍使用OSS Java SDK的常见问题及解决方法。
包冲突
错误原因
使用OSS Java SDK时,报类似如下错误,说明工程中可能有包冲突。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/ssl/TrustStrategy at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268) at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193) at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:77) Caused by: java.lang.ClassNotFoundException: org.apache.http.ssl.TrustStrategy at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 3 more
或
Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52) at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56) at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:82) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:95) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:104) at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:62) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:572) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:174) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:158) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:125) at com.aliyun.oss.common.comm.DefaultServiceClient.createHttpClientConnectionManager(DefaultServiceClient.java:237) at com.aliyun.oss.common.comm.DefaultServiceClient.<init>(DefaultServiceClient.java:78) at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268) at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193) at OSSManagerImpl.upload(OSSManagerImpl.java:42) at OSSManagerImpl.main(OSSManagerImpl.java:63)
错误原因是OSS Java SDK使用了Apache HttpClient 4.4.1,而您的工程使用了与Apache HttpClient 4.4.1冲突的Apache HttpClient或commons-httpclient jar包。要查看工程使用的jar包及版本,请在您的工程目录下执行
mvn dependency:tree
。如下图所示,您的工程里使用了Apache HttpClient 4.3:解决方法
包冲突有以下两种解决方法:
使用统一版本。如果您的工程使用与Apache HttpClient 4.4.1冲突的版本,请您使用4.4.1版本,并在pom.xml删除其它版本的Apache HttpClient依赖。如果您的工程使用了commons-httpclient,也可能存在冲突,请删除commons-httpclient。
解决依赖冲突。如果您的工程依赖多个第三方包,而第三方包又依赖不同版本的Apache HttpClient,您的工程里会有依赖冲突,请使用exclusion解除。更多信息,请参见Maven Guides。
OSS Java SDK依赖以下版本的包,冲突解决办法与HttpClient类似。
缺少包
错误原因
使用OSS Java SDK时,报类似如下错误,说明您的工程中可能缺少编译或运行OSS Java SDK所必需的包。
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/auth/Credentials at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268) at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193) at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76) Caused by: java.lang.ClassNotFoundException: org.apache.http.auth.Credentials at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 3 more
或
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/protocol/HttpContext at com.aliyun.oss.OSSClient.<init>(OSSClient.java:268) at com.aliyun.oss.OSSClient.<init>(OSSClient.java:193) at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:76) Caused by: java.lang.ClassNotFoundException: org.apache.http.protocol.HttpContext at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 3 more
或
Exception in thread "main" java.lang.NoClassDefFoundError: org/jdom/input/SAXBuilder at com.aliyun.oss.internal.ResponseParsers.getXmlRootElement(ResponseParsers.java:645) at … … at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:471) at com.aliyun.oss.OSSClient.doesBucketExist(OSSClient.java:465) at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:82) Caused by: java.lang.ClassNotFoundException: org.jdom.input.SAXBuilder at java.net.URLClassLoader$1.run(URLClassLoader.java:366) at java.net.URLClassLoader$1.run(URLClassLoader.java:355) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:354) at java.lang.ClassLoader.loadClass(ClassLoader.java:425) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ... 11 more
OSS Java SDK依赖下列包:
aliyun-sdk-oss-2.2.1.jar
hamcrest-core-1.1.jar
jdom-1.1.jar
commons-codec-1.9.jar
httpclient-4.4.1.jar
commons-logging-1.2.jar
httpcore-4.4.1.jar
log4j-1.2.15.jar
其中log4j-1.2.15.jar是可选的,需要日志功能的时候加入该包,其它包都是必需的。
解决方法
在您的工程中加入OSS Java SDK依赖的包。加入方法如下:
如果您的工程在Eclipse中,请参见Java SDK使用手册中的安装方式二。
如果您的工程在Ant中,请把OSS Java SDK依赖的包放入工程的lib目录中。
如果您直接使用.javac或.java文件,请使用
-classpath
或-cp
命令指定OSS Java SDK依赖的包路径,或把OSS Java SDK依赖的包放入classpath路径下。
连接超时
错误原因
运行OSS Java SDK程序时报如下类似错误,可能原因是Endpoint错误或者网络不通。
com.aliyun.oss.ClientException: SocketException at com.aliyun.oss.common.utils.ExceptionFactory.createNetworkException(ExceptionFactory.java:71) at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:116) at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:121) at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:67) at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:92) at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:140) at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:111) at com.aliyun.oss.internal.OSSBucketOperation.getBucketInfo(OSSBucketOperation.java:1152) at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1220) at com.aliyun.oss.OSSClient.getBucketInfo(OSSClient.java:1214) at com.aliyun.oss.demo.HelloOSS.main(HelloOSS.java:94) Caused by: org.apache.http.conn.HttpHostConnectException: Connect to oss-test.oss-cn-hangzhou-internal.aliyuncs.com:80 [oss-test.oss-cn-hangzhou-internal.aliyuncs.com/10.84.135.99] failed: Connection timed out: connect at org.apache.http.impl.conn.DefaultHttpClientConnectionOperator.connect(DefaultHttpClientConnectionOperator.java:151) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.connect(PoolingHttpClientConnectionManager.java:353) at org.apache.http.impl.execchain.MainClientExec.establishRoute(MainClientExec.java:380) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:236) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113) ... 9 more
解决方法
您可以使用ossutil工具快速定位错误原因并解决问题。
报错SignatureDoesNotMatch
错误原因1
AccessKey ID和AccessKey Secret不一致。
有关获取AccessKey ID和AccessKey Secret的操作步骤,请参见创建AccessKey。
错误原因2
签名URL使用不正确。错误示例如下:
GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, object); request.setExpiration( new Date(new Date().getTime() + 3600 * 1000)); request.addUserMetadata("author"); URL url = ossClient.generatePresignedUrl(request); Map<String, String> header = new HashMap<String, String>(); header.put("author"); ossClient.putObject(url, new ByteArrayInputStream("Hello OSS".getBytes()), -1, header);
未指定Method参数时,默认使用GET方法。以上为PutObject请求,应指定Method参数并设置为PUT方法。
通过PutObject发送请求时,请求Header中自定义的元数据必须以
x-oss-meta-
为前缀。以上示例中自定义元数据应改为x-oss-meta-author
。解决方法:
指定Method,并修改Header:
request.addUserMetadata("author"); request.setMethod(HttpMethod.PUT); URL url = ossClient.generatePresignedUrl(request); Map<String, String> header = new HashMap<String, String>(); header.put("x-oss-meta-" + "author"); ossClient.putObject(url, new ByteArrayInputStream("Hello OSS".getBytes()), -1, header);
错误原因3
使用了低于3.7.0版本的OSS SDK,项目中引入了4.5.9及以上版本的HttpClient。
上传的文件名中包含
+
字符,而4.5.9版本的HttpClient不会对+
进行URLEncode编码,从而造成客户端与服务端计算的签名不一致而报错。
解决方法:
OSS SDK建议升级为3.11.1及以上版本, 以兼容4.5.9版本的HttpClient。
移除多余的HttpClient依赖。引入OSS SDK时会自动引入HttpClient依赖,如果是第三方库另外引入了HttpClient,请参见包冲突解决方案。
错误原因4
HttpClient 4.5.10版本不支持Header中包含ISO/9959-1标准以外的字符,但在项目中引入了4.5.10以上的httpclient,并在请求Header中包含了ISO/9959-1标准以外的字符,例如
x-oss-meta-
开头的自定义元数据中传入了中文字符。解决方法:
参见包冲突解决方案,移除冲突的HttpClient版本。
在请求Header中传入符合ISO/9959-1标准的字符。
报异常“Failed to parse the response result”
错误原因
客户端某些特殊的软件拦截了HTTP请求,或者公网路由劫持了HTTP请求。
在Java 11上使用OSS Java SDK,且未在pom.xml文件中添加JAXB相关依赖。
解决方法
切换为HTTPS请求。
添加JAXB相关依赖。操作步骤,请参见安装SDK。
org.apache.http.NoHttpResponseException: The target server failed to respond
错误原因
运行OSS Java SDK程序时,报类似如下错误:
使用过期的连接会导致上述错误,该错误仅在Java SDK 2.1.2之前的版本出现。
解决方法
请升级OSS Java SDK到2.1.2及以后版本。
JVM中存在大量org.apache.http.impl.conn.PoolingHttpClientConnectionManager实例
错误原因
ossClient没有关闭导致。
解决方法
主动关闭已执行完毕的ossClient或使用单例模式。
调用OSS Java SDK不响应
错误原因
调用OSS Java SDK不响应。通过
jstack -l pid
命令查看堆栈,问题出现在如下的位置:"main" prio=6 tid=0x000000000291e000 nid=0xc40 waiting on condition [0x0000000002dae000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) - parking to wait for <0x00000007d85697f8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:186) at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2043) at org.apache.http.pool.PoolEntryFuture.await(PoolEntryFuture.java:138) at org.apache.http.pool.AbstractConnPool.getPoolEntryBlocking(AbstractConnPool.java:306) at org.apache.http.pool.AbstractConnPool.access$000(AbstractConnPool.java:64) at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:192) at org.apache.http.pool.AbstractConnPool$2.getPoolEntry(AbstractConnPool.java:185) at org.apache.http.pool.PoolEntryFuture.get(PoolEntryFuture.java:107) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.leaseConnection(PoolingHttpClientConnectionManager.java:276) at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$1.get(PoolingHttpClientConnectionManager.java:263) at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:190) at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184) at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110) at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184) at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82) at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:113) at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:123) at com.aliyun.oss.common.comm.ServiceClient.sendRequest(ServiceClient.java:68) at com.aliyun.oss.internal.OSSOperation.send(OSSOperation.java:94) at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:146) at com.aliyun.oss.internal.OSSOperation.doOperation(OSSOperation.java:113) at com.aliyun.oss.internal.OSSObjectOperation.getObject(OSSObjectOperation.java:229) at com.aliyun.oss.OSSClient.getObject(OSSClient.java:629) at com.aliyun.oss.OSSClient.getObject(OSSClient.java:617) at samples.HelloOSS.main(HelloOSS.java:49)
原因是连接池中连接泄漏,可能是使用ossObject后没有关闭。
解决方法
请检查您的程序,确保没有连接泄漏。关闭方法如下:
// 读取文件 OSSObject ossObject = ossClient.getObject(bucketName, objectName); // OSS操作 // 关闭ossObject ossObject.close();
问题排查的具体步骤,请参见OSS Java SDK不响应问题排查。
连接关闭
错误原因
如果您在使用ossClient.getObject时,报类似如下错误:
Exception in thread "main" org.apache.http.ConnectionClosedException: Premature end of Content-Length delimited message body (expected: 11990526; received: 202880) at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:180) at org.apache.http.impl.io.ContentLengthInputStream.read(ContentLengthInputStream.java:200) at org.apache.http.impl.io.ContentLengthInputStream.close(ContentLengthInputStream.java:103) at org.apache.http.impl.execchain.ResponseEntityProxy.streamClosed(ResponseEntityProxy.java:128) at org.apache.http.conn.EofSensorInputStream.checkClose(EofSensorInputStream.java:228) at org.apache.http.conn.EofSensorInputStream.close(EofSensorInputStream.java:174) at java.io.FilterInputStream.close(FilterInputStream.java:181) at java.io.FilterInputStream.close(FilterInputStream.java:181) at com.aliyun.oss.event.ProgressInputStream.close(ProgressInputStream.java:147) at java.io.FilterInputStream.close(FilterInputStream.java:181) at samples.HelloOSS.main(HelloOSS.java:39)
原因是两次读取数据间隔时间超过1分钟。OSS会关闭超过1分钟没有发送或接收数据的连接。
解决方法
如果您每次仅读取部分数据,且处理数据的时间不固定,建议使用指定范围读取,避免数据读取时连接关闭。当范围下载完成后,连接将关闭。更多信息,请参见范围下载。
内存泄露
错误原因
调用OSS Java SDK的程序,运行一段时间(根据业务量,几小时到几天不等)后内存泄露。 推荐使用Eclipse Memory Analyzer (MAT)分析内存使用情况。更多信息,请参见使用MAT进行堆转储文件分析。
如果分析结果类似下图所示(PoolingHttpClientConnectionManager占96%的内存),原因是程序中可能多次执行new OSSClient,但是没有调用ossClient.shutdown,造成内存泄漏。
解决方法
new OSSClient操作完成后,请通过shutdown进行关闭,保证new OSSClient和ossClient.shutdown成对使用。
调用ossClient.shutdown报异常InterruptedException
错误原因
OSS Java SDK 2.3.0之前的版本在调用ossClient.shutdown时报如下异常:
java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at com.aliyun.oss.common.comm.IdleConnectionReaper.run(IdleConnectionReaper:76)
原因是ossClient后台线程IdleConnectionReaper会定时关闭闲置连接。IdleConnectionReaper在Sleep时,调用ossClient.shutdown,就会报上面的异常。
解决方法
使用如下代码,忽略该异常:
try { ossClient.shutdown(); } catch(Exception e) { }
请求出现异常“SDK.ServerUnreachable : Speicified endpoint or uri is not valid”
错误原因
用户端并发请求STS过高。
网络到Server端超时。
所使用的STS SDK以及SDK core不是最新版本。
解决方法
用户端并发请求STS过高,而用户端的ECS或者本地PC不足以承载当时的并发,降低OSS并发。
用户的网络到Server端有超时现象可以进行抓包验证。
建议将STS SDK及SDK core升级至最新版本。
NoSuchKey
错误原因
源文件不存在。
解决方法
参见404错误。
SocketException
错误原因
可能是socket在init阶段就失败了,导致请求没有到达OSS。
解决方法
建议从以下几个方面进行排查:
出现问题时是否出现网络抖动。
主机的socket连接数是否占满。
确认出现问题时连接数是否超过SDK中设置的maxconnection,如果连接数超过maxconnection设置,也会出现socket异常。
如果以上都没有问题,建议您部署tcpdump或者Wireshark抓包,问题复现后再分析数据包。
使用OSS PostObject的callback没有触发回调
使用OSS PostObject的callback没有触发回调,但是通过PutObject用同样的callback触发了回调。一般情况下,如果JSON格式有误或者回调失败,都会返回相应的消息,这里需要分别测试Put和Post回调效果:
错误原因
发送请求时callback参数在file下面。
解决方法
调整callback参数与file的位置。
此时测试结果显示业务服务器成功抓取请求。
Connection pool shut down
Caused by: java.lang.IllegalStateException: Connection pool shut down
at org.apache.http.util.Asserts.check(Asserts.java:34)
at org.apache.http.pool.AbstractConnPool.lease(AbstractConnPool.java:184)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.requestConnection(PoolingHttpClientConnectionManager.java:251)
at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:175)
at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:184)
at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:184)
at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
at com.aliyun.oss.common.comm.DefaultServiceClient.sendRequestCore(DefaultServiceClient.java:124)
at com.aliyun.oss.common.comm.ServiceClient.sendRequestImpl(ServiceClient.java:133)
... 8 more
错误原因
调用
ossClient.shutdown()
接口后,还继续通过ossClient发送请求。解决方法
请检查调用逻辑,确保调用了
ossClient.shutdown()
接口之后,不再通过ossClient发送请求。
使用Java SDK的generatePresignedUrl生成的请求报错Request has expired
错误原因
int类型溢出,导致2038年时间戳问题。
超出URL设置的过期时间后发起上传请求。
解决方法
如果是int类型溢出,建议Java SDK中过期时长不要超过2038年。
如果因超出URL设置的过期时间后发起上传请求,建议设置合理的过期时间,确保过期时间大于您发起请求的时间。
报错Invalid Response或Implementation of JAXB-API has not been found on module path or classpath
错误原因
使用了Java 9以上的版本,并且没有添加JAXB依赖。
解决方法
关于如何添加JAXB依赖的更多信息,请参见安装SDK。
OSS Java SDK 中的 OSSClient 是线程安全的吗?
OSSClient 是线程安全的,允许多线程访问同一实例。您可以结合业务需求,复用同一个OSSClient 实例,也可以创建多个 OSSClient 实例,分别使用。
OSSClient 实例内部维持一个连接池。当 OSSClient 实例不再使用时,请调用 shutdown 方法将其关闭,避免创建过多的 OSSClient 实例导致资源耗尽。
客户端网络正常,但是通过HTTP访问时报错Connection reset,如何处理?
部分区域的运营商可能会对OSS的域名进行劫持,建议通过Endpoint的方式配置为HTTPS协议。更多信息,请参见配置客户端。
Java 17 Cannot invoke "java.lang.reflect.Method.invoke(Object, Object[])" because "com.sun.xml.bind.v2.runtime.reflect.opt.Injector.defineClass" is null
问题原因
JAXB在Java 9中被标记为弃用并在Java 11中被删除。
解决方法
添加以下依赖。
<dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.messaging.saaj</groupId> <artifactId>saaj-impl</artifactId> <version>1.5.1</version> </dependency>
Java SDK如何配置内部日志打印?
Java SDK打印日志采用的是Apache Commons Logging(JCL)日志框架。JCL可以选择多种日志实现框架(具体参见:JCL-Configuration),比较常见的是JCL over log4j或者JCL over SLF4j两种,相关实现方式如下:
JCL over log4j: 您需要引入log4j的依赖(log4j 2.x有多种实现框架可以选,默认是log4j-api+log4j-core),并按log4j的配置方式进行配置,具体流程参考APACHE LOG4J-API Separation。
JCL over slf4j: 您需要引入jcl-over-slf4j 和slf4j的依赖(slf4j也有多种实现框架可选,比如slf4j-api+logback-classic),并按照slf4j的配置方式进行配置,具体流程参考SJF4J-Bridging legacy APIs。
Apache Log4j定义了不同级别的日志,包括OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE和ALL。
通过配置log4j的属性选择开启或者关闭SDK日志:
其他错误
更多错误排查,请参见OSS错误响应。