github.com/grafana/pyroscope@v1.18.0/pkg/util/spanlogger/spanlogger.go (about)

     1  // SPDX-License-Identifier: AGPL-3.0-only
     2  
     3  package spanlogger
     4  
     5  import (
     6  	"context"
     7  
     8  	"github.com/go-kit/log"
     9  	"github.com/grafana/dskit/spanlogger"
    10  	"github.com/grafana/dskit/tenant"
    11  )
    12  
    13  const (
    14  	// TenantIDsTagName is the tenant IDs tag name.
    15  	TenantIDsTagName = spanlogger.TenantIDsTagName
    16  )
    17  
    18  // defaultTenantResolver is used to include tenant IDs in spans automatically from the context.
    19  var defaultTenantResolver = tenant.NewMultiResolver()
    20  
    21  // SpanLogger unifies tracing and logging, to reduce repetition.
    22  type SpanLogger = spanlogger.SpanLogger
    23  
    24  // NewWithLogger is like New but allows to pass a logger.
    25  func NewWithLogger(ctx context.Context, logger log.Logger, method string, kvps ...interface{}) (*SpanLogger, context.Context) {
    26  	return spanlogger.New(ctx, logger, method, defaultTenantResolver, kvps...)
    27  }
    28  
    29  // FromContext returns a SpanLogger using the current parent span.
    30  // If there is no parent span, the SpanLogger will only log to the logger
    31  // within the context. If the context doesn't have a logger, the fallback
    32  // logger is used.
    33  func FromContext(ctx context.Context, fallback log.Logger) *SpanLogger {
    34  	return spanlogger.FromContext(ctx, fallback, defaultTenantResolver)
    35  }