设置桶日志规则(java sdk)-九游平台
功能说明
调用设置桶日志管理配置接口,您可以为指定桶打开桶日志功能,并配置日志存放的目标桶。创建桶时,默认是不生成桶的日志的,调用java sdk的设置桶日志管理配置接口时,接口会自动为您打开桶日志配置。桶日志功能开启后,桶的每次操作将会产生一条日志,并将多条日志打包成一个日志文件。日志文件存放位置需要在开启桶日志功能时指定,可以存放到开启日志功能的桶中,也可以存放到其他您有权限的桶中,但需要和开启日志功能的桶在同一个region中。您还可以根据需要配置日志文件的访问权限,以及日志文件的文件名前缀。

开发过程中,您有任何问题可以在github上,或者在中发帖求助。
接口约束
- 日志目标桶(存放日志的桶)与源桶(产生日志的桶)必须在同一个区域(region)。
- 如果桶的存储类别为低频访问存储或归档存储,则不能作为日志目标桶。
- 由于日志文件是obs产生,并且由obs上传到存放日志的桶中,因此obs需要获得委托授权,用于上传生成的日志文件,所以在配置桶日志管理前,需要先到统一身份认证服务生成一个对obs服务的委托,委托配置权限只需设置目标桶的上传对象权限。如何创建委托请参考创建云服务委托。
- 您必须是桶拥有者或拥有设置桶日志管理配置的权限,才能设置桶日志管理配置。建议使用iam或桶策略进行授权,如果使用iam则需授予obs:bucket:putbucketlogging权限,如果使用桶策略则需授予putbucketlogging权限。相关授权方式介绍可参见obs权限控制概述,配置方式详见、。
- obs支持的region以及region与endpoint的对应关系,详细信息请参见。
方法定义
obsclient.setbucketlogging(final setbucketloggingrequest request)
请求参数说明
参数名称 |
参数类型 |
是否必选 |
描述 |
---|---|---|---|
request |
必选 |
参数解释: 设置桶日志请求参数,详见setbucketloggingrequest。 |
参数名称 |
参数类型 |
是否必选 |
描述 |
---|---|---|---|
bucketname |
string |
必选 |
参数解释: 产生日志的桶名称。 约束限制:
默认取值: 无 |
loggingconfiguration |
必选 |
参数解释: 桶日志配置,详见bucketloggingconfiguration。 |
参数名称 |
参数类型 |
是否必选 |
描述 |
---|---|---|---|
agency |
string |
如果是设置桶日志配置则必选 |
参数解释: 目标桶(存放日志文件的桶)的所有者通过统一身份认证服务(iam)创建对obs云服务委托的名称。 可以选择账号下已有的iam委托,也可以创建一个新的委托。创建委托参见创建iam委托。 约束限制: 默认情况下,在为委托配置权限时只需设置日志存储桶的上传对象(putobject)权限。如果日志存储桶开启了默认加密功能,还需要委托同时具有日志存储桶所在区域的kms administrator权限。 默认取值: 无 |
targetbucketname |
string |
可选 |
参数解释: 日志存储桶的桶名,该桶用于存放日志文件。 约束限制:
默认取值: 无 |
logfileprefix |
string |
可选 |
参数解释: 日志文件对象的对象名前缀,设置后日志文件对象将携带统一前缀存储在日志存储桶中。 取值范围: 长度大于0且不超过1024的字符串。 默认取值: 无 |
targetgrantslist |
list<grantandpermission> |
可选 |
参数解释: 被授权用户的权限信息列表,定义哪些用户可以针对日志文件进行哪些访问操作,详见grantandpermission。 |
参数名称 |
参数类型 |
是否必选 |
描述 |
---|---|---|---|
grantee |
必选 |
参数解释: 被授权用户或用户组,详见granteeinterface。 |
|
permission |
必选 |
参数解释: 用户或用户组被授予的权限。 取值范围: 详见permission。 默认取值: 无 |
|
delivered |
boolean |
可选 |
参数解释: 桶的acl是否向桶内对象传递,作用于桶内所有对象。 取值范围: true:是,桶acl向桶内对象传递。 false:否,桶acl不向桶内对象传递,仅作用于桶。 默认取值: false |
参数名称 |
参数类型 |
是否必选 |
描述 |
---|---|---|---|
必选 |
参数解释: 被授权用户的用户信息,详见canonicalgrantee。 |
||
必选 |
参数解释: 被授权用户组的用户组信息。 取值范围: 详见groupgrantee。 默认取值: 无 |
参数名称 |
参数类型 |
是否必选 |
描述 |
---|---|---|---|
grantid |
string |
如果type为用户类型则必选 |
参数解释: 被授权用户的账号id,即domain_id。 取值范围: 如何获取账号id请参见。 默认取值: 无 |
displayname |
string |
可选 |
参数描述: 被授权用户的账号名。 取值范围: 如何获取账号名请参见。 默认取值: 无 |
常量名 |
说明 |
---|---|
all_users |
所有用户。 |
authenticated_users |
授权用户,已废弃。 |
log_delivery |
日志投递组,已废弃。 |
常量名 |
原始值 |
说明 |
---|---|---|
permission_read |
read |
读权限。 如果有桶的读权限,则可以获取该桶内对象列表、桶内多段任务、桶的元数据、桶的多版本。 如果有对象的读权限,则可以获取该对象内容和元数据。 |
permission_write |
write |
写权限。 如果有桶的写权限,则可以上传、覆盖和删除该桶内任何对象和段。 此权限在对象上不适用。 |
permission_read_acp |
read_acp |
读取acl配置的权限。 如果有读acp的权限,则可以获取对应的桶或对象的权限控制列表(acl)。 桶或对象的所有者永远拥有读对应桶或对象acp的权限。 |
permission_write_acp |
write_acp |
修改acl配置的权限。 如果有写acp的权限,则可以更新对应桶或对象的权限控制列表(acl)。 桶或对象的所有者永远拥有写对应桶或对象的acp的权限。 拥有了写acp的权限,由于可以更改权限控制策略,实际上意味着拥有了完全访问的权限。 |
permission_full_control |
full_control |
完全控制权限,包括对桶或对象的读写权限,以及对桶或对象acl配置的读写权限。 如果有桶的完全控制权限意味着拥有read、write、read_acp和write_acp的权限。 如果有对象的完全控制权限意味着拥有read、read_acp和write_acp的权限。 |
返回结果说明
参数名称 |
参数类型 |
描述 |
---|---|---|
statuscode |
int |
参数解释: http状态码。 取值范围: 状态码是一组从2xx(成功)到4xx或5xx(错误)的数字代码,状态码表示了请求响应的状态。 完整的状态码列表请参见。 默认取值: 无 |
responseheaders |
map |
参数解释: http响应消息头列表,由多个元组构成。元组中string代表响应消息头的名称,object代表响应消息头的值。 默认取值: 无 |
代码示例:开启桶日志
本示例用于设置examplebucket桶的日志管理配置,委托名称为your agency,生成以targetprefix为前缀的日志文件,并将此日志存放在targetbucketname桶内。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
importcom.obs.services.obsclient; importcom.obs.services.exception.obsexception; importcom.obs.services.model.bucketloggingconfiguration; publicclass setbucketlogging001{ publicstaticvoidmain(string[]args){ // 您可以通过环境变量获取访问密钥ak/sk,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥ak/sk stringak=system.getenv("access_key_id"); stringsk=system.getenv("secret_access_key_id"); // 【可选】如果使用临时ak/sk和securitytoken访问obs,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥ak/sk/securitytoken,也可以使用其他外部引入方式传入。 // string securitytoken = system.getenv("security_token"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 stringendpoint="https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endpoint,也可以使用其他外部引入方式传入。 //string endpoint = system.getenv("endpoint"); // 创建obsclient实例 // 使用永久ak/sk初始化客户端 obsclientobsclient=newobsclient(ak,sk,endpoint); // 使用临时ak/sk和securitytoken初始化客户端 // obsclient obsclient = new obsclient(ak, sk, securitytoken, endpoint); try{ // 开启桶日志 bucketloggingconfigurationconfig=newbucketloggingconfiguration(); // 设置委托名字,需要到统一身份认证服务(iam)创建委托 config.setagency("your agency"); config.settargetbucketname("targetbucketname"); config.setlogfileprefix("targetprefix"); obsclient.setbucketlogging("examplebucket",config); system.out.println("setbucketlogging successfully"); }catch(obsexceptione){ system.out.println("setbucketlogging 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(exceptione){ system.out.println("setbucketlogging failed"); // 其他异常信息打印 e.printstacktrace(); } } } |
代码示例:为日志对象设置读权限
本示例用于设置examplebucket桶的日志管理配置,委托名称为your agency,生成以prefix为前缀的日志文件,将此日志存放在targetbucketname桶内,并为所有用户设置日志对象的读权限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
importcom.obs.services.obsclient; importcom.obs.services.exception.obsexception; importcom.obs.services.model.bucketloggingconfiguration; importcom.obs.services.model.grantandpermission; importcom.obs.services.model.groupgrantee; importcom.obs.services.model.permission; publicclass setbucketlogging002 { publicstaticvoidmain(string[]args){ // 您可以通过环境变量获取访问密钥ak/sk,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥ak/sk stringak=system.getenv("access_key_id"); stringsk=system.getenv("secret_access_key_id"); // 【可选】如果使用临时ak/sk和securitytoken访问obs,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥ak/sk/securitytoken,也可以使用其他外部引入方式传入。 // string securitytoken = system.getenv("security_token"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 stringendpoint="https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endpoint,也可以使用其他外部引入方式传入。 //string endpoint = system.getenv("endpoint"); // 创建obsclient实例 // 使用永久ak/sk初始化客户端 obsclientobsclient=newobsclient(ak,sk,endpoint); // 使用临时ak/sk和securitytoken初始化客户端 // obsclient obsclient = new obsclient(ak, sk, securitytoken, endpoint); try{ // 为日志对象设置权限 stringtargetbucket="targetbucketname"; // 设置桶的日志配置 bucketloggingconfigurationconfig=newbucketloggingconfiguration(); // 设置委托名字,需要到统一身份认证服务(iam)创建委托 config.setagency("your agency"); config.settargetbucketname(targetbucket); config.setlogfileprefix("prefix"); // 为所有用户设置对日志对象的读权限 grantandpermissiongrant1=newgrantandpermission(groupgrantee.all_users,permission.permission_read); config.settargetgrants(newgrantandpermission[]{grant1}); obsclient.setbucketlogging("examplebucket",config); system.out.println("setbucketlogging successfully"); }catch(obsexceptione){ system.out.println("setbucketlogging 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(exceptione){ system.out.println("setbucketlogging failed"); // 其他异常信息打印 e.printstacktrace(); } } } |
代码示例:关闭桶日志功能
关闭桶日志功能实际上就是调用obsclient.setbucketlogging将examplebucket桶的日志配置清空,以下代码展示了如何关闭桶日志。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
importcom.obs.services.obsclient; importcom.obs.services.exception.obsexception; importcom.obs.services.model.bucketloggingconfiguration; publicclass setbucketlogging003 { publicstaticvoidmain(string[]args){ // 您可以通过环境变量获取访问密钥ak/sk,也可以使用其他外部引入方式传入。如果使用硬编码可能会存在泄露风险。 // 您可以登录访问管理控制台获取访问密钥ak/sk stringak=system.getenv("access_key_id"); stringsk=system.getenv("secret_access_key_id"); // 【可选】如果使用临时ak/sk和securitytoken访问obs,同样建议您尽量避免使用硬编码,以降低信息泄露风险。 // 您可以通过环境变量获取访问密钥ak/sk/securitytoken,也可以使用其他外部引入方式传入。 // string securitytoken = system.getenv("security_token"); // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。 stringendpoint="https://obs.cn-north-4.myhuaweicloud.com"; // 您可以通过环境变量获取endpoint,也可以使用其他外部引入方式传入。 //string endpoint = system.getenv("endpoint"); // 创建obsclient实例 // 使用永久ak/sk初始化客户端 obsclientobsclient=newobsclient(ak,sk,endpoint); // 使用临时ak/sk和securitytoken初始化客户端 // obsclient obsclient = new obsclient(ak, sk, securitytoken, endpoint); try{ // 对桶设置空的日志配置来关闭桶日志 obsclient.setbucketlogging("examplebucket",newbucketloggingconfiguration()); system.out.println("setbucketlogging successfully"); }catch(obsexceptione){ system.out.println("setbucketlogging 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(exceptione){ system.out.println("setbucketlogging failed"); // 其他异常信息打印 e.printstacktrace(); } } } |
相关文档
意见反馈
文档内容是否对您有帮助?
如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨