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