Updated on 2026-09-22 GMT+08:00

Enabling Bucket Logging

If you have any questions during development, post them on the Issues page of GitHub. For details about parameters and usage of each API, see API Reference.

You can call ObsClient->setBucketLogging to enable bucket logging.

  • The source bucket and target bucket of logging must be in the same region.
  • Calling setBucketLogging will overwrite all existing logging configurations of a bucket. To modify some configurations, call getBucketLogging to obtain the existing configurations, modify them, and then call setBucketLogging.
  • If the bucket is in the OBS Infrequent Access or Archive storage class, it cannot be used as the target bucket.

Enabling Bucket Logging

Sample code:

<?php
// Import the dependency library.
require 'vendor/autoload.php';
// Import the SDK code library during the installation with the source code.
// require 'obs-autoloader.php';
// Declare the namespace.
use Obs\ObsClient;
use Obs\ObsException;

// Create an ObsClient instance.
$obsClient = new ObsClient([
    // Obtain an AK/SK pair using environment variables (recommended) or import an AK/SK pair in other ways. Using hard coding may result in leakage.
    // Obtain an AK/SK pair on the management console. For details, see https://support.huaweicloud.com/intl/en-us/usermanual-ca/ca_01_0003.html.
    'key' => getenv('ACCESS_KEY_ID'),
    'secret' => getenv('SECRET_ACCESS_KEY'),
    'endpoint' => 'https://your-endpoint',
]);

// Configure bucket logging.
try {
    $targetBucketName = 'targetbucketname';
    // Configure logging for the bucket.
    $resp = $obsClient->setBucketLogging([
        'Bucket' => 'bucketname',
        // Name of the OBS agency created by the owner of the target bucket on IAM.
        'Agency' => 'Agency name',
        'LoggingEnabled'=> [
            'TargetBucket' => $targetBucketName,
            'TargetPrefix'=> 'prefix',
        ]
    ]);
    printf("RequestId:%s\n", $resp['RequestId']);
} catch (ObsException $e) {
    // If the operation fails, obtain the exception details.
    printf("SetBucketLoggingFailed: Status:%d, Code:%s, Message:%s\n",
        $e->getStatusCode(), $e->getExceptionCode(), $e->getExceptionMessage());
} finally {
    // Close ObsClient to release resources.
    $obsClient->close();
}

Use the LoggingEnabled parameter to configure logging for a bucket.

Setting ACLs for Objects to Be Logged

Sample code:

<?php
// Import the dependency library.
require 'vendor/autoload.php';
// Import the SDK code library during the installation with the source code.
// require 'obs-autoloader.php';
// Declare the namespace.
use Obs\ObsClient;
use Obs\ObsException;

// Create an ObsClient instance.
$obsClient = new ObsClient([
    // Obtain an AK/SK pair using environment variables (recommended) or import an AK/SK pair in other ways. Using hard coding may result in leakage.
    // Obtain an AK/SK pair on the management console. For details, see https://support.huaweicloud.com/intl/en-us/usermanual-ca/ca_01_0003.html.
    'key' => getenv('ACCESS_KEY_ID'),
    'secret' => getenv('SECRET_ACCESS_KEY'),
    'endpoint' => 'https://your-endpoint',
]);

// Configure bucket logging.
try {
    ;

    $targetBucketName = 'targetbucketname';

    // Configure logging for the bucket.
    $resp = $obsClient->setBucketLogging([
        'Bucket' => 'bucketname',
        // Name of the OBS agency created by the owner of the target bucket on IAM.
        'Agency' => 'Agency name',
        'LoggingEnabled' => [
            'TargetBucket' => $targetBucketName,
            'TargetPrefix' => 'prefix',
            'TargetGrants' => [
                // Grant all users the read permission for the logs.
                [
                    'Grantee' => [
                        'URI' => ObsClient::GroupAllUsers,
                        'Type' => 'Group'
                    ],
                    'Permission' => ObsClient::PermissionRead
                ],
            ]
        ]
    ]);
    printf( "RequestId:%s\n", $resp['RequestId']);
} catch (ObsException $e) {
    // If the operation fails, obtain the exception details.
    printf("SetBucketLoggingFailed: Status:%d, Code:%s, Message:%s\n",
        $e->getStatusCode(), $e->getExceptionCode(), $e->getExceptionMessage());
} finally {
    // Close ObsClient to release resources.
    $obsClient->close();
}