Go SDK
Install the Logdash Go SDK, send your first log and your first metric.
Install the package, paste your API key and the first log lands in the dashboard within a second. Everything below is copied from the Go SDK README.
Install
go get github.com/logdash-io/go-sdk/logdash Initialise
Copy the ingest key from your domain's settings in Logdash and keep it in an environment variable. The key identifies the domain the data lands in.
package main
import (
"context"
"os"
"time"
"github.com/logdash-io/go-sdk/logdash"
)
func main() {
ld := logdash.New(
logdash.WithApiKey(os.Getenv("LOGDASH_API_KEY")),
)
// Shutdown waits for every enqueued log and metric to flush.
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
defer ld.Shutdown(ctx)
} Send a log
package main
import (
"os"
"github.com/logdash-io/go-sdk/logdash"
)
func main() {
ld := logdash.New(logdash.WithApiKey(os.Getenv("LOGDASH_API_KEY")))
logger := ld.Logger
logger.Info("Application started successfully")
logger.Error("An unexpected error occurred")
// Every level has an ...F() counterpart, like fmt.Printf.
logger.InfoF("Processing %v of %v item", 1, 10)
} Send a metric
Metrics are named numbers. Set one to an absolute value or mutate it by a delta, and Logdash charts the history.
package main
import (
"os"
"github.com/logdash-io/go-sdk/logdash"
)
func main() {
ld := logdash.New(logdash.WithApiKey(os.Getenv("LOGDASH_API_KEY")))
metrics := ld.Metrics
// to set absolute value
metrics.Set("users", 0)
// or increment / decrement by
metrics.Mutate("users", 1)
} Works with
- net/http
- log/slog
- Gin
- Echo
- Fiber
FAQ
Can I keep using log/slog?
Yes. Wrap the logger with
logdash.NewSlogTextHandler(ld.Logger, slog.HandlerOptions{}) and pass it to slog.New. Error maps to Error, Warn to Warn, Info to Info, Debug to Debug and anything below Debug to Silly.How do I flush before the process exits?
Call
ld.Shutdown(ctx) with a context deadline. It blocks until every queued log and metric has been sent or the context expires.Is there a printf-style logging call?
Yes. Every level has an
...F() counterpart, so logger.InfoF("Processing %v of %v item", i+1, items) works the way fmt.Printf does.