From 14f32cc09c9a9fc179f5213636665689ca885dd4 Mon Sep 17 00:00:00 2001 From: naudachu Date: Sat, 11 May 2024 09:42:39 +0000 Subject: [PATCH] Add readme.md --- readme.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..d144e3f --- /dev/null +++ b/readme.md @@ -0,0 +1,73 @@ +# How to + +## At the middleware +```go +func (h *Handler) LogMW(next http.HandlerFunc) http.HandlerFunc { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + var ( + ctx context.Context = rctx.AssignRequestID(r.Context()) + rWithCtx *http.Request = r.WithContext(ctx) + + reqID string = rctx.GetRequestID(ctx) + values = r.URL.Query() + + attrs []slog.Attr = []slog.Attr{ + slog.String("req id", reqID), + slog.String("method", r.Method), + slog.String("URI", r.RequestURI), + slog.String("remote", r.RemoteAddr), + } + ) + + // Append query params as logger info: + for i, value := range values { + switch { + case len(value) == 1: + attrs = append(attrs, slog.Attr{ + Key: i, + Value: slog.StringValue(value[0]), + }) + case len(value) > 1: + attrs = append(attrs, slog.Attr{ + Key: i, + Value: slog.AnyValue(value), + }) + } + } + + h.log.LogAttrs( + rWithCtx.Context(), + slog.LevelInfo, + "request called", + attrs..., + ) + + next.ServeHTTP(w, rWithCtx) + + slog.Debug("request handled", + slog.String("request ID", reqID)) + }) +} + +``` + +## At the http Handler + +```go +func HandleSomething(w http.ResponseWriter, r *http.Request) { + var ( + ctx context.Context = r.Context() + reqID string = rctx.GetRequestID(ctx) + log *slog.Logger = slog.Default().With( + slog.String("req id", reqID), + slog.String("level", "handler"), + ) + ) + + // do something and where is the case to log w/ req id: + log.Error("decode req body", + slog.String("error", err.Error())) + return +} + +```