### Go slog-logstash Basic Usage Example Source: https://github.com/samber/slog-logstash/blob/main/README.md Demonstrates how to initialize and use the `slog-logstash` handler with a TCP connection, including examples of logging errors and structured information with groups and attributes. ```go import ( pool "github.com/samber/go-tcp-pool" sloglogstash "github.com/samber/slog-logstash/v2" "log/slog" ) func main() { // ncat -l 9999 -k conn, err := pool.Dial("tcp", "localhost:9999") if err != nil { log.Fatal(err) } logger := slog.New(sloglogstash.Option{Level: slog.LevelDebug, Conn: conn}.NewLogstashHandler()) logger = logger. With("environment", "dev"). With("release", "v1.0.0") // log error logger. With("category", "sql"). With("query.statement", "SELECT COUNT(*) FROM users;"). With("query.duration", 1*time.Second). With("error", fmt.Errorf("could not count users")). Error("caramba!") // log user signup logger. With( slog.Group("user", slog.String("id", "user-123"), slog.Time("created_at", time.Now()), ), ). Info("user registration") } ``` -------------------------------- ### Install slog-logstash Go Module Source: https://github.com/samber/slog-logstash/blob/main/README.md This command fetches and installs the `slog-logstash` Go module into your project. It requires Go version 1.21 or higher for compatibility. ```Shell go get github.com/samber/slog-logstash/v2 ``` -------------------------------- ### Example JSON Output from slog-logstash Source: https://github.com/samber/slog-logstash/blob/main/README.md Illustrates the JSON payload structure generated by `slog-logstash` for both error and info level logs, showing how attributes, groups, and timestamps are formatted for Logstash. ```json { "@timestamp":"2023-04-10T14:00:0.000000+00:00", "level":"ERROR", "message":"caramba!", "error":{ "error":"could not count users", "kind":"*errors.errorString", "stack":null }, "extra":{ "environment":"dev", "release":"v1.0.0", "category":"sql", "query.statement":"SELECT COUNT(*) FROM users;", "query.duration": "1s" } } { "@timestamp":"2023-04-10T14:00:0.000000+00:00", "level":"INFO", "message":"user registration", "error":null, "extra":{ "environment":"dev", "release":"v1.0.0", "user":{ "id":"user-123", "created_at":"2023-04-10T14:00:0.000000+00:00" } } } ``` -------------------------------- ### Development and Testing Commands for slog-logstash Source: https://github.com/samber/slog-logstash/blob/main/README.md Provides common `make` commands for setting up development dependencies and running tests for the `slog-logstash` project. ```bash # Install some dev dependencies make tools # Run tests make test # or make watch-test ``` -------------------------------- ### Integrate OpenTelemetry Tracing with slog-logstash in Go Source: https://github.com/samber/slog-logstash/blob/main/README.md Shows how to integrate `slog-logstash` with OpenTelemetry to extract trace and span IDs from the context and include them as attributes in log entries. ```go import ( sloglogstash "github.com/samber/slog-logstash" 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( sloglogstash.Option{ // ... AttrFromContext: []func(ctx context.Context) []slog.Attr{ slogotel.ExtractOtelAttrFromContext([]string{"tracing"}, "trace_id", "span_id"), }, }.NewLogstashHandler(), ) logger.ErrorContext(ctx, "a message") } ``` -------------------------------- ### Configure Global slog-logstash Parameters in Go Source: https://github.com/samber/slog-logstash/blob/main/README.md Sets global configuration parameters for `slog-logstash`, such as keys for source, context, and error attributes in the log payload. ```go sloglogstash.SourceKey = "source" sloglogstash.ContextKey = "extra" sloglogstash.ErrorKeys = []string{"error", "err"} ``` -------------------------------- ### Define slog-logstash Handler Options in Go Source: https://github.com/samber/slog-logstash/blob/main/README.md Defines the `Option` struct used to configure the `slog-logstash` handler, including log level, connection, custom converters, and attribute extraction from context. ```go type Option struct { // log level (default: debug) Level slog.Leveler // connection to logstash Conn net.Conn // optional: customize json payload 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 } ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.