handler.go raw
1 // Copyright The OpenTelemetry Authors
2 // SPDX-License-Identifier: Apache-2.0
3
4 // Package global provides the OpenTelemetry global API.
5 package global // import "go.opentelemetry.io/otel/internal/global"
6
7 import (
8 "log"
9 "sync/atomic"
10 )
11
12 // ErrorHandler handles irremediable events.
13 type ErrorHandler interface {
14 // Handle handles any error deemed irremediable by an OpenTelemetry
15 // component.
16 Handle(error)
17 }
18
19 type ErrDelegator struct {
20 delegate atomic.Pointer[ErrorHandler]
21 }
22
23 // Compile-time check that delegator implements ErrorHandler.
24 var _ ErrorHandler = (*ErrDelegator)(nil)
25
26 func (d *ErrDelegator) Handle(err error) {
27 if eh := d.delegate.Load(); eh != nil {
28 (*eh).Handle(err)
29 return
30 }
31 log.Print(err)
32 }
33
34 // setDelegate sets the ErrorHandler delegate.
35 func (d *ErrDelegator) setDelegate(eh ErrorHandler) {
36 d.delegate.Store(&eh)
37 }
38