All Products
Search
Document Center

Object Storage Service:Logging via OSS SDK for Go 2.0

Last Updated:Mar 20, 2026

OSS generates hourly access logs based on predefined naming conventions and stores them in a target bucket you specify. This topic shows how to enable, query, and disable bucket logging, and how to configure custom log fields using the OSS SDK for Go 2.0.

Prerequisites

Before you begin, ensure that you have:

  • An OSS bucket

  • Credentials configured as environment variables. For setup instructions, see Configure access credentials

  • The required RAM permissions for each operation: For instructions on granting permissions, see Attach a custom policy to a RAM user.

    OperationRequired permission
    Enable loggingoss:PutBucketLogging
    Query logging settingsoss:GetBucketLogging
    Disable loggingoss:DeleteBucketLogging

Usage notes

The sample code uses region ID cn-hangzhou. By default, the public endpoint is used. For same-region access from other Alibaba Cloud services, use an internal endpoint instead. For a full list of regions and endpoints, see OSS regions and endpoints.

Enable logging

The following code enables logging for a bucket and stores log objects in a specified target bucket under an optional key prefix.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.PutBucketLoggingRequest{
		Bucket: oss.Ptr(bucketName),
		BucketLoggingStatus: &oss.BucketLoggingStatus{
			LoggingEnabled: &oss.LoggingEnabled{
				// Target bucket where log objects are stored.
				// The source and target buckets can be the same or different buckets in the same region.
				TargetBucket: oss.Ptr("TargetBucket"),
				// Prefix for log object keys. If omitted, logs are stored in the root directory of the target bucket.
				TargetPrefix: oss.Ptr("log"),
			},
		},
	}

	result, err := client.PutBucketLogging(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put bucket logging %v", err)
	}

	log.Printf("put bucket logging result: %#v\n", result)
}

Query logging settings

The following code retrieves the logging settings for a bucket, including the target bucket and key prefix.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.GetBucketLoggingRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.GetBucketLogging(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get bucket logging %v", err)
	}

	// Access the target bucket name from the result.
	log.Printf("get bucket logging result target bucket: %#v\n", result.BucketLoggingStatus.LoggingEnabled.TargetBucket)
}

Disable logging

The following code disables logging for a bucket.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.DeleteBucketLoggingRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.DeleteBucketLogging(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete bucket logging %v", err)
	}

	log.Printf("delete bucket logging result: %#v\n", result)
}

Configure custom log fields

Use PutUserDefinedLogFieldsConfig to add custom fields to the user_defined_log_fields field in access logs. Custom log fields capture specific request headers or query parameters for downstream analysis.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.PutUserDefinedLogFieldsConfigRequest{
		Bucket: oss.Ptr(bucketName),
		UserDefinedLogFieldsConfiguration: &oss.UserDefinedLogFieldsConfiguration{
			HeaderSet: &oss.LoggingHeaderSet{
				Headers: []string{"header1", "header2"}, // HTTP request headers to log.
			},
			ParamSet: &oss.LoggingParamSet{
				Parameters: []string{"param"}, // Query parameters to log.
			},
		},
	}

	result, err := client.PutUserDefinedLogFieldsConfig(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to put user defined log fields config %v", err)
	}

	log.Printf("put user defined log fields config result: %#v\n", result)
}

Query custom log field settings

Use GetUserDefinedLogFieldsConfig to retrieve the custom log fields configured for a bucket.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.GetUserDefinedLogFieldsConfigRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.GetUserDefinedLogFieldsConfig(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to get user defined log fields config %v", err)
	}

	log.Printf("get user defined log fields config result: %#v\n", result)
}

Delete custom log field settings

Use DeleteUserDefinedLogFieldsConfig to delete custom user_defined_log_fields settings from a bucket.

package main

import (
	"context"
	"flag"
	"log"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

var (
	region     string
	bucketName string
)

func init() {
	flag.StringVar(&region, "region", "", "The region in which the bucket is located.")
	flag.StringVar(&bucketName, "bucket", "", "The name of the bucket.")
}

func main() {
	flag.Parse()

	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, bucket name required")
	}

	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("invalid parameters, region required")
	}

	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	client := oss.NewClient(cfg)

	request := &oss.DeleteUserDefinedLogFieldsConfigRequest{
		Bucket: oss.Ptr(bucketName),
	}

	result, err := client.DeleteUserDefinedLogFieldsConfig(context.TODO(), request)
	if err != nil {
		log.Fatalf("failed to delete user defined log fields config %v", err)
	}

	log.Printf("delete user defined log fields config result: %#v\n", result)
}

References