From b984b04bc85b0bda21c2c193f4a54a53a753a53f Mon Sep 17 00:00:00 2001 From: michaelkedar Date: Thu, 19 Feb 2026 03:38:52 +0000 Subject: [PATCH] fix: attach error reporting directly to logs; sourceLocation --- deployment/terraform/modules/osv/gcp_apis.tf | 6 ---- go/go.mod | 1 - go/go.sum | 2 -- go/logger/init.go | 31 ++++-------------- go/logger/logger.go | 34 +++----------------- 5 files changed, 10 insertions(+), 64 deletions(-) diff --git a/deployment/terraform/modules/osv/gcp_apis.tf b/deployment/terraform/modules/osv/gcp_apis.tf index 4bb8c924f7f..0876408246f 100644 --- a/deployment/terraform/modules/osv/gcp_apis.tf +++ b/deployment/terraform/modules/osv/gcp_apis.tf @@ -103,9 +103,3 @@ resource "google_project_service" "certificate_manager" { service = "certificatemanager.googleapis.com" disable_on_destroy = false } - -resource "google_project_service" "error_reporting" { - project = var.project_id - service = "clouderrorreporting.googleapis.com" - disable_on_destroy = false -} diff --git a/go/go.mod b/go/go.mod index 177ca2bfc8d..8a0cb970be7 100644 --- a/go/go.mod +++ b/go/go.mod @@ -4,7 +4,6 @@ go 1.26.0 require ( cloud.google.com/go/datastore v1.22.0 - cloud.google.com/go/errorreporting v0.4.0 cloud.google.com/go/monitoring v1.24.3 cloud.google.com/go/pubsub/v2 v2.4.0 cloud.google.com/go/storage v1.60.0 diff --git a/go/go.sum b/go/go.sum index 5afcb77d041..51c50397d4a 100644 --- a/go/go.sum +++ b/go/go.sum @@ -11,8 +11,6 @@ cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdB cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/datastore v1.22.0 h1:FOyx2Ag6ibD2wFkz9S8EiNrmBugia8pQOfpyJxi2yqA= cloud.google.com/go/datastore v1.22.0/go.mod h1:aopSX+Whx0lHspWWBj+AjWt68/zjYsPfDe3LjWtqZg8= -cloud.google.com/go/errorreporting v0.4.0 h1:uLcasn2hKpj6iSPvHrzRjkJcaNVaKx8yKQcP3VTS6aI= -cloud.google.com/go/errorreporting v0.4.0/go.mod h1:dZGEhqzdHZSRxxWLVjC3Ue5CVaROzvP58D9rU6zbBfw= cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= cloud.google.com/go/logging v1.13.1 h1:O7LvmO0kGLaHY/gq8cV7T0dyp6zJhYAOtZPX4TF3QtY= diff --git a/go/logger/init.go b/go/logger/init.go index 3b62b07fb7a..a1dfc21b83c 100644 --- a/go/logger/init.go +++ b/go/logger/init.go @@ -10,7 +10,6 @@ import ( "strings" "sync" - "cloud.google.com/go/errorreporting" texporter "github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/trace" "go.opentelemetry.io/contrib/detectors/gcp" "go.opentelemetry.io/otel" @@ -21,11 +20,10 @@ import ( ) var ( - slogLogger = slog.New(newLocalHandler(os.Stdout)) - errorClient *errorreporting.Client - once sync.Once - tp *sdktrace.TracerProvider - projectID string + slogLogger = slog.New(newLocalHandler(os.Stdout)) + once sync.Once + tp *sdktrace.TracerProvider + projectID string ) // InitGlobalLogger initializes the global slog logger and GCP observability clients. @@ -48,7 +46,6 @@ func InitGlobalLogger() { serviceName = filepath.Base(os.Args[0]) } - initErrorReporting(context.Background(), projectID, serviceName) initTracing(context.Background(), projectID, serviceName) } handler := slog.NewJSONHandler(os.Stdout, cloudHandlerOptions()) @@ -56,11 +53,8 @@ func InitGlobalLogger() { }) } -// Close flushes any buffered log, trace or error reports. +// Close flushes any buffered log or trace reports. func Close() { - if errorClient != nil { - errorClient.Close() - } if tp != nil { if err := tp.Shutdown(context.Background()); err != nil { fmt.Fprintf(os.Stderr, "Error shutting down tracer provider: %v", err) @@ -68,19 +62,6 @@ func Close() { } } -func initErrorReporting(ctx context.Context, projectID, serviceName string) { - var err error - errorClient, err = errorreporting.NewClient(ctx, projectID, errorreporting.Config{ - ServiceName: serviceName, - OnError: func(err error) { - fmt.Fprintf(os.Stderr, "Could not log error to Error Reporting: %v\n", err) - }, - }) - if err != nil { - fmt.Fprintf(os.Stderr, "Failed to create errorreporting client: %v\n", err) - } -} - func initTracing(ctx context.Context, projectID, serviceName string) { exporter, err := texporter.New(texporter.WithProjectID(projectID)) if err != nil { @@ -165,7 +146,7 @@ func cloudHandlerOptions() *slog.HandlerOptions { source := a.Value.Any().(*slog.Source) source.File = filepath.Base(source.File) - return slog.Attr{Key: "sourceLocation", Value: slog.AnyValue(source)} + return slog.Attr{Key: "logging.googleapis.com/sourceLocation", Value: slog.AnyValue(source)} } return a diff --git a/go/logger/logger.go b/go/logger/logger.go index 2487313dd0a..8bb838665c9 100644 --- a/go/logger/logger.go +++ b/go/logger/logger.go @@ -3,14 +3,12 @@ package logger import ( "context" - "errors" "fmt" "log/slog" "os" "runtime" "time" - "cloud.google.com/go/errorreporting" "go.opentelemetry.io/otel/trace" ) @@ -29,40 +27,16 @@ func log(ctx context.Context, level slog.Level, msg string, a []any) { slog.Bool("logging.googleapis.com/trace_sampled", spanContext.IsSampled()), ) } + + if level >= slog.LevelError { + r.Add(slog.String("@type", "type.googleapis.com/google.devtools.clouderrorreporting.v1beta1.ReportedErrorEvent")) + } } if slogLogger.Handler().Enabled(ctx, level) { //nolint:errcheck slogLogger.Handler().Handle(ctx, r) } - - if level >= slog.LevelError && errorClient != nil { - // Try find an error in the attributes - var err error - hasErr := false - for _, attr := range a { - if att, ok := attr.(slog.Attr); ok { - if attrErr, ok := att.Value.Any().(error); ok { - err = attrErr - hasErr = true - - break - } - } - } - // Fallback to using the message as the error if no error was provided. - if !hasErr { - err = errors.New(msg) - } - // Report the error to Google Cloud Error Reporting. - // We leave Stack nil to let the client automatically capture the stack trace. - // Note: This will include the logger functions at the top of the stack. - // If we want to hide them, we would need to manually capture and trim the stack. - errorClient.Report(errorreporting.Entry{ - Error: err, - Stack: nil, - }) - } } // Debug prints a Debug level log.