Files
wonderwall/internal/observability/logging.go
2025-01-30 14:03:29 +01:00

55 lines
1.1 KiB
Go

package observability
import (
"fmt"
"time"
log "github.com/sirupsen/logrus"
"github.com/uptrace/opentelemetry-go-extra/otellogrus"
)
func textFormatter() log.Formatter {
return &log.TextFormatter{
DisableTimestamp: false,
FullTimestamp: true,
TimestampFormat: time.RFC3339Nano,
}
}
func jsonFormatter() log.Formatter {
return &log.JSONFormatter{
TimestampFormat: time.RFC3339Nano,
}
}
func SetupLogger(level, format string) error {
switch format {
case "json":
log.SetFormatter(jsonFormatter())
case "text":
log.SetFormatter(textFormatter())
default:
return fmt.Errorf("log format '%s' is not recognized", format)
}
logLevel, err := log.ParseLevel(level)
if err != nil {
return fmt.Errorf("while setting log level: %s", err)
}
log.SetLevel(logLevel)
log.Tracef("Trace logging enabled")
// Add OpenTelemetry logging hook.
// This attaches logs to the associated span in the given log context as events.
log.AddHook(otellogrus.NewHook(otellogrus.WithLevels(
log.PanicLevel,
log.FatalLevel,
log.ErrorLevel,
log.WarnLevel,
log.InfoLevel,
)))
return nil
}