开发者社区 问答 正文

PHP-SDK之如何实现设置访问日志?

OSS允许用户对Bucket设置访问日志记录,设置之后对于Bucket的访问会被记录成日志,日志存储在OSS上由用户指定的Bucket中,文件的格式为: <TargetPrefix><SourceBucket>-YYYY-mm-DD-HH-MM-SS-UniqueString

其中TargetPrefix由用户指定。日志规则由以下3项组成:

  • enable,是否开启
  • target_bucket,存放日志文件的Bucket
  • target_prefix,日志文件的前缀

更多关于访问日志的内容请参考 Bucket访问日志

提示:
  • 以下场景的完整代码参见:GitHub


开启Bucket日志


您可以通过OssClient::putBucketLogging开启存储空间的访问日志: <?php
/**
* 设置bucket的Logging配置
*
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function putBucketLogging($ossClient, $bucket)
{
    $option = array();
    //访问日志存放在本bucket下
    $targetBucket = $bucket;
    $targetPrefix = "access.log";
    try {
        $ossClient->putBucketLogging($bucket, $targetBucket, $targetPrefix, $option);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


查看Bucket日志设置


您可以通过OssClient::getBucketLogging查看存储空间的日志配置: <?php
/**
* 获取bucket的Logging配置
*
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function getBucketLogging($ossClient, $bucket)
{
    $loggingConfig = null;
    $options = array();
    try {
        $loggingConfig = $ossClient->getBucketLogging($bucket, $options);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    print($loggingConfig->serializeToXml() . "\n");
}



关闭Bucket日志


您可以通过OssClient::deleteBucketLogging删除存储空间的日志配置: <?php
/**
* 删除bucket的Logging配置
*
* @param OssClient $ossClient OSSClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function deleteBucketLogging($ossClient, $bucket)
{
    try {
        $ossClient->deleteBucketLogging($bucket);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


展开
收起
青衫无名 2017-10-19 10:07:13 2075 分享 版权
阿里云 AI 助理回答

开启、查看与关闭阿里云OSS Bucket访问日志的详细操作指南

开启Bucket日志

  1. 前提条件

    • 确保您的Bucket位于支持OSS服务的地域中,如华东1(杭州)等。
    • 您已拥有阿里云OSS的访问权限和凭证(AccessKey ID和AccessKey Secret)。
  2. 操作步骤

    • 使用阿里云OSS SDK(以PHP为例),首先实例化OssClient,并配置好凭证信息及Endpoint。
    use OSS\OssClient;
    use OSS\Core\OssUtil;
    
    $accessKeyId = "<yourAccessKeyId>";
    $accessKeySecret = "<yourAccessKeySecret>";
    $bucket = "<yourBucketName>";
    $endpoint = "<yourEndpoint>";
    
    $ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
    
    • 调用putBucketLogging方法开启日志记录。指定目标Bucket(通常为同一账号下的另一个Bucket)和日志文件前缀。
    function putBucketLogging($ossClient, $bucket, $targetBucket, $targetPrefix){
       try {
           $ossClient->putBucketLogging($bucket, [
               'TargetBucket' => $targetBucket,
               'TargetPrefix' => $targetPrefix
           ]);
           echo "日志功能已成功开启。\n";
       } catch (OssException $e) {
           printf(__FUNCTION__ . ": FAILED\n");
           printf($e->getMessage() . "\n");
       }
    }
    
    // 示例调用
    putBucketLogging($ossClient, $bucket, $bucket, "access-logs/");
    

查看Bucket日志设置

  1. 操作步骤

    • 通过调用getBucketLogging方法获取当前Bucket的日志配置。
    function getBucketLogging($ossClient, $bucket){
       try {
           $loggingConfig = $ossClient->getBucketLogging($bucket);
           echo "当前Bucket日志配置:\n" . $loggingConfig->serializeToXml() . "\n";
       } catch (OssException $e) {
           printf(__FUNCTION__ . ": FAILED\n");
           printf($e->getMessage() . "\n");
       }
    }
    
    // 示例调用
    getBucketLogging($ossClient, $bucket);
    

关闭Bucket日志

  1. 操作步骤

    • 直接调用deleteBucketLogging方法删除日志配置,实现关闭日志记录功能。
    function deleteBucketLogging($ossClient, $bucket){
       try {
           $ossClient->deleteBucketLogging($bucket);
           echo "Bucket日志功能已关闭。\n";
       } catch (OssException $e) {
           printf(__FUNCTION__ . ": FAILED\n");
           printf($e->getMessage() . "\n");
       }
    }
    
    // 示例调用
    deleteBucketLogging($ossClient, $bucket);
    

注意事项:

  • 日志文件命名遵循规则<TargetPrefix><SourceBucket>YYYY-mm-DD-HH-MM-SS-UniqueString
  • 确保源Bucket和目标Bucket属于同一账号且位于相同地域,除非源Bucket无地域属性。
  • 定期清理日志以减少存储费用,建议设置生命周期规则自动删除。
  • 避免在OSS-HDFS服务启用的Bucket中将日志前缀设为.dlsdata/

参考以上代码示例和注意事项,您可以根据实际需求管理阿里云OSS Bucket的访问日志功能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答