Skip to content

Commit c94efe7

Browse files
committed
Concise mode: Print single line on successful requests (HTTP 200-399)
1 parent 745c365 commit c94efe7

File tree

1 file changed

+21
-15
lines changed

1 file changed

+21
-15
lines changed

handler.go

+21-15
Original file line numberDiff line numberDiff line change
@@ -23,48 +23,54 @@ func NewHandler(handler slog.Handler, opts *Options) *Handler {
2323
}
2424

2525
func (h *Handler) Enabled(ctx context.Context, level slog.Level) bool {
26-
if log, ok := ctx.Value(logCtxKey{}).(*Log); ok {
26+
if log, ok := ctx.Value(logCtxKey{}).(*log); ok {
2727
return level >= log.Level
2828
}
2929

3030
return level >= h.opts.Level
3131
}
3232

3333
func (h *Handler) Handle(ctx context.Context, rec slog.Record) error {
34-
log, ok := ctx.Value(logCtxKey{}).(*Log)
34+
log, ok := ctx.Value(logCtxKey{}).(*log)
3535
if !ok {
3636
// Panic to stress test the use of this handler. Later, we can return error.
3737
panic("use of httplog.DefaultHandler outside of context set by http.RequestLogger middleware")
3838
}
3939

40-
// r := log.Req
41-
42-
scheme := "http"
43-
if log.Req.TLS != nil {
44-
scheme = "https"
40+
if h.opts.LogRequestCURL {
41+
rec.AddAttrs(slog.String("curl", log.curl()))
4542
}
4643

4744
if h.opts.Concise {
48-
rec.AddAttrs(slog.Any("requestHeaders", slog.GroupValue(getHeaderAttrs(log.Req.Header, h.opts.LogRequestHeaders)...)))
45+
reqAttrs := []slog.Attr{}
46+
respAttrs := []slog.Attr{}
47+
48+
reqAttrs = append(reqAttrs, slog.Any("headers", slog.GroupValue(getHeaderAttrs(log.Req.Header, h.opts.LogRequestHeaders)...)))
4949
if log.LogRequestBody && log.Resp != nil {
50-
rec.AddAttrs(slog.String("requestBody", log.ReqBody.String()))
50+
reqAttrs = append(reqAttrs, slog.String("body", log.ReqBody.String()))
5151
if !log.ReqBodyFullyRead {
52-
rec.AddAttrs(slog.Bool("requestBodyFullyRead", false))
52+
reqAttrs = append(reqAttrs, slog.Bool("bodyFullyRead", false))
5353
}
5454
}
5555

5656
if log.Resp != nil {
57-
rec.Message = fmt.Sprintf("HTTP %v (%v): %s %s", log.WW.Status(), log.Resp.Duration, log.Req.Method, log.Req.URL)
58-
rec.AddAttrs(slog.Any("responseHeaders", slog.GroupValue(getHeaderAttrs(log.Resp.Header(), h.opts.LogResponseHeaders)...)))
57+
rec.Message = fmt.Sprintf("%s %s => HTTP %v (%v)", log.Req.Method, log.Req.URL, log.WW.Status(), log.Resp.Duration)
58+
respAttrs = append(respAttrs, slog.Any("headers", slog.GroupValue(getHeaderAttrs(log.Resp.Header(), h.opts.LogResponseHeaders)...)))
5959
if log.LogResponseBody {
60-
rec.AddAttrs(slog.String("responseBody", log.RespBody.String()))
60+
respAttrs = append(respAttrs, slog.String("body", log.RespBody.String()))
6161
}
6262
} else {
63-
rec.Message = fmt.Sprintf("%s %s://%s%s", log.Req.Method, scheme, log.Req.Host, log.Req.URL)
63+
rec.Message = fmt.Sprintf("%s %s://%s%s", log.Req.Method, log.scheme(), log.Req.Host, log.Req.URL)
6464
}
65+
66+
if log.WW.Status() >= 400 {
67+
rec.AddAttrs(slog.Any("request", slog.GroupValue(reqAttrs...)))
68+
rec.AddAttrs(slog.Any("response", slog.GroupValue(respAttrs...)))
69+
}
70+
6571
} else {
6672
reqAttrs := []slog.Attr{
67-
slog.String("url", fmt.Sprintf("%s://%s%s", scheme, log.Req.Host, log.Req.URL)),
73+
slog.String("url", fmt.Sprintf("%s://%s%s", log.scheme(), log.Req.Host, log.Req.URL)),
6874
slog.String("method", log.Req.Method),
6975
slog.String("path", log.Req.URL.Path),
7076
slog.String("remoteIp", log.Req.RemoteAddr),

0 commit comments

Comments
 (0)