diff options
Diffstat (limited to 'internal/slog/slog.go')
| -rw-r--r-- | internal/slog/slog.go | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/internal/slog/slog.go b/internal/slog/slog.go new file mode 100644 index 0000000..70d45bb --- /dev/null +++ b/internal/slog/slog.go @@ -0,0 +1,38 @@ +// Package slog is my set of wrappers around package slog. +package slog + +import ( + "flag" + "fmt" + "os" + "sync" + + "golang.org/x/exp/slog" +) + +var ( + slogLevel = flag.String("slog-level", "INFO", "log level") + + lock sync.Mutex + + // The current slog handler. + Handler slog.Handler +) + +func Init() { + var programLevel slog.Level + if err := (&programLevel).UnmarshalText([]byte(*slogLevel)); err != nil { + fmt.Fprintf(os.Stderr, "invalid log level %s: %v, using info\n", *slogLevel, err) + programLevel = slog.LevelInfo + } + + h := slog.NewJSONHandler(os.Stderr, &slog.HandlerOptions{ + AddSource: true, + Level: programLevel, + }) + slog.SetDefault(slog.New(h)) + + lock.Lock() + defer lock.Unlock() + Handler = h +} |
