Skip to content

Instantly share code, notes, and snippets.

@Jimeux
Created March 30, 2023 08:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Jimeux/5eb989c4c276d3de55119860b6d64fd5 to your computer and use it in GitHub Desktop.
Save Jimeux/5eb989c4c276d3de55119860b6d64fd5 to your computer and use it in GitHub Desktop.
package otel
import (
"context"
"os"
"time"
semconv "go.opentelemetry.io/otel/semconv/v1.12.0"
"go.opentelemetry.io/otel/trace"
"golang.org/x/exp/slog"
)
var (
resourceGroup slog.Attr
logger slog.Logger
)
func InitLogger(name, ver, env string) {
resourceGroup = slog.Group("Resource",
slog.Attr{
Key: string(semconv.ServiceNameKey),
Value: slog.StringValue(name),
},
slog.Attr{
Key: string(semconv.ServiceVersionKey),
Value: slog.StringValue(ver),
},
slog.Attr{
Key: string(semconv.DeploymentEnvironmentKey),
Value: slog.StringValue(env),
},
)
// TODO 2022/11/06 @Jimeux custom handler to avoid redundant fields
logger = slog.New(slog.NewJSONHandler(os.Stdout))
}
func LogErr(ctx context.Context, err error, msg string, attrs ...slog.Attr) {
traceID, spanID := "none", "none"
span := trace.SpanFromContext(ctx)
if span.IsRecording() {
traceID = span.SpanContext().TraceID().String()
spanID = span.SpanContext().SpanID().String()
}
logger.Error(msg, err,
slog.Int64("Timestamp", time.Now().UnixNano()),
slog.String("TraceId", traceID),
slog.String("SpanId", spanID),
slog.String("SeverityText", "ERROR"),
slog.Int("SeverityNumber", 20), // 17-20 = ERROR
resourceGroup,
slog.String("Body", msg),
slog.Group("Attributes", attrs...),
)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment