Python SDK日志开启

为方便追查问题,Python SDK提供了日志记录功能,该功能默认处于关闭状态。

说明

开启Python SDK日志记录功能需要Python SDK 2.6.x以上版本。

背景信息

Python SDK日志记录功能可以收集定位各类OSS操作的日志信息,并以日志文件的形式存储在本地。

  • 日志格式:<time><name><level><threadId><message>

  • 日志级别:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET

    说明

    指定日志级别后,本地日志文件只会记录指定级别及高于指定级别的信息。例如指定日志级别为INFO,则日志文件会记录CRITICAL、ERROR、WARNINGINFO级别的相关日志信息。

注意事项

  • 本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的RegionEndpoint的对应关系,请参见OSS地域和访问域名

  • 本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见初始化

开启Python SDK日志记录功能

以下代码用于开启Python SDK日志记录功能。

# -*- coding: utf-8 -*-

import os
import logging
import oss2
from itertools import islice
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 下载日志信息到本地日志文件,并保存到指定的本地路径中。
# 如果未指定本地路径只填写了本地日志文件名称(例如examplelogfile.log),则下载后的文件默认保存到示例程序所属项目对应本地路径中。
log_file_path = "D:\\localpath\\examplelogfile.log"

# 开启日志。
oss2.set_file_logger(log_file_path, 'oss2', logging.INFO)

# 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。注意,v4签名下,必须填写该参数
region = "cn-hangzhou"

# examplebucket填写存储空间名称。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)

# 遍历文件目录。
for b in islice(oss2.ObjectIterator(bucket), 10):
    print(b.key)
# 获取文件元数据。
# 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
object_meta = bucket.get_object_meta('exampledir/exampleobject.txt')

相应的日志信息如下:

说明

如果需要更详细的日志信息,您可以将日志级别修改为DEBUG。

2018-11-20 16:37:46,437 oss2.api [INFO] 26716 : Exception: {
    'status': 404, 
    'x-oss-request-id': '5BF3C7DA236B3A201CE64679', 
    'details': {
        'HostId': 'examplebucket.oss-cn-shenzhen.aliyuncs.com', 
        'Message': 'The specified key does not exist.', 
        'Code': 'NoSuchKey', 
        'RequestId': '5BF3C7DA236B3A201CE64679', 
        'Key': 'exampledir/exampleobject.txt'
    }
}

根据以上日志信息可知初始化一个Bucket会遍历其中所有的Object,当请求的Object不存在时会发生错误,错误信息为NoSuchKey