本文介紹使用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();
串連關閉
錯誤原因
如果您在使用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是否多安全執行緒?
是的,OSS Java SDK多安全執行緒。
報錯AccessDenied Hierarchical namespace is disabled
錯誤原因
調用CreateDirectory、Rename或者DeleteDirectory介面前未開啟階層命名空間。
解決方案
建立Bucket時開啟階層命名空間。具體步驟,請參見建立儲存空間。
用戶端網路正常,但是通過HTTP訪問時報錯Connection reset,如何處理?
部分地區的電訊廠商可能會對OSS的網域名稱進行劫持,建議通過Endpoint的方式配置為HTTPS協議。更多資訊,請參見配置OSSClient。
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錯誤響應。