E5E8 GitHub - samber/slog-betterstack: 🚨 slog: Betterstack handler
[go: up one dir, main page]

Skip to content
  • Insights
  • samber/slog-betterstack

    < F440 /div>

    Folders and files

    NameName
    Last commit message
    Last commit date

    Latest commit

    Β 

    History

    36 Commits
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 
    Β 

    Repository files navigation

    slog: Betterstack handler

    tag Go Version GoDoc Build Status Go report Coverage Contributors License

    A Betterstack Handler for slog Go library.

    See also:

    HTTP middlewares:

    Loggers:

    Log sinks:

    πŸš€ Install

    go get github.com/samber/slog-betterstack

    Compatibility: go >= 1.21

    No breaking changes will be made to exported APIs before v2.0.0.

    πŸ’‘ Usage

    GoDoc: https://pkg.go.dev/github.com/samber/slog-betterstack

    Handler options

    type Option struct {
      // log level (default: debug)
      Level     slog.Leveler
    
      // token
      Token   string
      // optional: endpoint
      Endpoint string
      // default: 10s
      Timeout time.Duration
    
      // optional: customize record builder
      Converter Converter
      // optional: custom marshaler
      Marshaler func(v any) ([]byte, error)
      // optional: fetch attributes from context
      AttrFromContext []func(ctx context.Context) []slog.Attr
    
      // optional: see slog.HandlerOptions
      AddSource   bool
      ReplaceAttr func(groups []string, a slog.Attr) slog.Attr
    }

    Other global parameters:

    slogbetterstack.SourceKey = "runtime"
    slogbetterstack.ContextKey = "context"
    slogbetterstack.ErrorKeys = []string{"error", "err"}

    Example

    import (
    	"fmt"
    	"net/http"
    	"time"
    
    	slogbetterstack "github.com/samber/slog-betterstack"
    
    	"log/slog"
    )
    
    func main() {
    	logger := slog.New(slogbetterstack.Option{Level: slog.LevelDebug, Token: "xxxxx"}.NewBetterstackHandler())
    	logger = logger.With("release", "v1.0.0")
    
    	logger.
    		With(
    			slog.Group("user",
    				slog.String("id", "user-123"),
    				slog.Time("created_at", time.Now()),
    			),
    		).
    		With("error", fmt.Errorf("an error")).
    		Error("a message", slog.Int("count", 1))
    }

    Tracing

    Import the samber/slog-otel library.

    import (
    	slogbetterstack "github.com/samber/slog-betterstack"
    	slogotel "github.com/samber/slog-otel"
    	"go.opentelemetry.io/otel/sdk/trace"
    )
    
    func main() {
    	tp := trace.NewTracerProvider(
    		trace.WithSampler(trace.AlwaysSample()),
    	)
    	tracer := tp.Tracer("hello/world")
    
    	ctx, span := tracer.Start(context.Background(), "foo")
    	defer span.End()
    
    	span.AddEvent("bar")
    
    	logger := slog.New(
    		slogbetterstack.Option{
    			// ...
    			AttrFromContext: []func(ctx context.Context) []slog.Attr{
    				slogotel.ExtractOtelAttrFromContext([]string{"tracing"}, "trace_id", "span_id"),
    			},
    		}.NewBetterstackHandler(),
    	)
    
    	logger.ErrorContext(ctx, "a message")
    }

    🀝 Contributing

    Don't hesitate ;)

    # Install some dev dependencies
    make tools
    
    # Run tests
    make test
    # or
    make watch-test

    πŸ‘€ Contributors

    Contributors

    πŸ’« Show your support

    Give a ⭐️ if this project helped you!

    GitHub Sponsors

    πŸ“ License

    Copyright Β© 2023 Samuel Berthe.

    This project is MIT licensed.

    0