handler.go 851 B

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