forked from
tangled.org/core
fork
Configure Feed
Select the types of activity you want to include in your feed.
Monorepo for Tangled
fork
Configure Feed
Select the types of activity you want to include in your feed.
1package log
2
3import (
4 "context"
5 "log/slog"
6 "os"
7)
8
9// NewHandler sets up a new slog.Handler with the service name
10// as an attribute
11func NewHandler(name string) slog.Handler {
12 handler := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{})
13
14 var attrs []slog.Attr
15 attrs = append(attrs, slog.Attr{Key: "service", Value: slog.StringValue(name)})
16 handler.WithAttrs(attrs)
17 return handler
18}
19
20func New(name string) *slog.Logger {
21 return slog.New(NewHandler(name))
22}
23
24func NewContext(ctx context.Context, name string) context.Context {
25 return IntoContext(ctx, New(name))
26}
27
28type ctxKey struct{}
29
30// IntoContext adds a logger to a context. Use FromContext to
31// pull the logger out.
32func IntoContext(ctx context.Context, l *slog.Logger) context.Context {
33 return context.WithValue(ctx, ctxKey{}, l)
34}
35
36// FromContext returns a logger from a context.Context;
37// if the passed context is nil, we return the default slog
38// logger.
39func FromContext(ctx context.Context) *slog.Logger {
40 if ctx != nil {
41 v := ctx.Value(ctxKey{})
42 if v == nil {
43 return slog.Default()
44 }
45 return v.(*slog.Logger)
46 }
47
48 return slog.Default()
49}