constellation/internal/cloud/gcp/logger.go

55 lines
1.1 KiB
Go
Raw Normal View History

/*
Copyright (c) Edgeless Systems GmbH
SPDX-License-Identifier: AGPL-3.0-only
*/
2022-06-03 09:55:18 +00:00
package gcp
import (
"context"
"fmt"
2022-06-03 09:55:18 +00:00
"log"
"cloud.google.com/go/compute/metadata"
2022-06-03 09:55:18 +00:00
"cloud.google.com/go/logging"
)
// Logger logs to GCP cloud logging. Do not use to log sensitive information.
2022-06-03 09:55:18 +00:00
type Logger struct {
client *logging.Client
logger *log.Logger
}
// NewLogger creates a new Cloud Logger for GCP.
// https://cloud.google.com/logging/docs/setup/go
func NewLogger(ctx context.Context, logName string) (*Logger, error) {
projectID, err := metadata.NewClient(nil).ProjectID()
2022-06-03 09:55:18 +00:00
if err != nil {
return nil, fmt.Errorf("retrieving project ID from imds: %w", err)
2022-06-03 09:55:18 +00:00
}
2022-06-03 09:55:18 +00:00
client, err := logging.NewClient(ctx, projectID)
if err != nil {
return nil, err
}
logger := client.Logger(logName).StandardLogger(logging.Info)
return &Logger{
client: client,
logger: logger,
}, nil
}
// Disclose stores log information in GCP Cloud Logging! Do **NOT** log sensitive
// information!
func (l *Logger) Disclose(msg string) {
l.logger.Println(msg)
}
// Close waits for all buffer to be written.
func (l *Logger) Close() error {
return l.client.Close()
}