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.
Operation Required permission Enable logging oss:PutBucketLoggingQuery logging settings oss:GetBucketLoggingDisable logging oss: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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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(®ion, "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)
}