handler.go 794 B

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