mirror of
https://github.com/chainguard-dev/clog
synced 2026-07-06 22:12:46 +00:00
add a flag option (#10)
I don't like any of the names here, and we might want it to be in a separate subpackage. This lets you say `--log-level=DEBUG` to set the level. The default is still INFO. --------- Signed-off-by: Jason Hall <jason@chainguard.dev>
This commit is contained in:
parent
d34ebd4160
commit
83244dc767
3 changed files with 37 additions and 2 deletions
|
|
@ -2,18 +2,29 @@ package main
|
|||
|
||||
import (
|
||||
"context"
|
||||
"flag"
|
||||
"log/slog"
|
||||
"os"
|
||||
|
||||
"github.com/chainguard-dev/clog"
|
||||
"github.com/chainguard-dev/clog/slag"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var level slag.Level
|
||||
flag.Var(&level, "log-level", "log level")
|
||||
flag.Parse()
|
||||
|
||||
slog.SetDefault(slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: &level})))
|
||||
|
||||
log := clog.NewLogger(slog.Default()).With("a", "b")
|
||||
ctx := clog.WithLogger(context.Background(), log)
|
||||
|
||||
// Grab logger from context and use
|
||||
clog.FromContext(ctx).With("foo", "bar").Infof("hello world")
|
||||
clog.FromContext(ctx).With("foo", "bar").Debugf("hello debug world")
|
||||
clog.FromContext(ctx).With("info", true).Infof("hello info world")
|
||||
clog.FromContext(ctx).With("warn", 42).Warnf("hello warn world")
|
||||
|
||||
// Package level context loggers are also aware
|
||||
clog.ErrorContext(ctx, "asdf")
|
||||
clog.ErrorContext(ctx, "hello error world")
|
||||
}
|
||||
|
|
|
|||
|
|
@ -97,6 +97,10 @@ func (l *Logger) Handler() slog.Handler {
|
|||
}
|
||||
|
||||
func wrap(ctx context.Context, logger *Logger, level slog.Level, msg string, args ...any) {
|
||||
if !logger.Handler().Enabled(ctx, level) {
|
||||
return
|
||||
}
|
||||
|
||||
var pcs [1]uintptr
|
||||
runtime.Callers(3, pcs[:]) // skip [Callers, Infof, wrapf]
|
||||
r := slog.NewRecord(time.Now(), level, msg, pcs[0])
|
||||
|
|
@ -107,6 +111,10 @@ func wrap(ctx context.Context, logger *Logger, level slog.Level, msg string, arg
|
|||
// wrapf is like wrap, but uses fmt.Sprintf to format the message.
|
||||
// NOTE: args are passed to fmt.Sprintf, not as [slog.Attr].
|
||||
func wrapf(ctx context.Context, logger *Logger, level slog.Level, format string, args ...any) {
|
||||
if !logger.Handler().Enabled(ctx, level) {
|
||||
return
|
||||
}
|
||||
|
||||
var pcs [1]uintptr
|
||||
runtime.Callers(3, pcs[:]) // skip [Callers, Infof, wrapf]
|
||||
r := slog.NewRecord(time.Now(), level, fmt.Sprintf(format, args...), pcs[0])
|
||||
|
|
|
|||
16
slag/flag.go
Normal file
16
slag/flag.go
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
package slag
|
||||
|
||||
import "log/slog"
|
||||
|
||||
type Level slog.Level
|
||||
|
||||
func (l *Level) Set(s string) error {
|
||||
var ll slog.Level
|
||||
if err := ll.UnmarshalText([]byte(s)); err != nil {
|
||||
return err
|
||||
}
|
||||
*l = Level(ll)
|
||||
return nil
|
||||
}
|
||||
func (l *Level) String() string { return slog.Level(*l).String() }
|
||||
func (l *Level) Level() slog.Level { return slog.Level(*l) }
|
||||
Loading…
Add table
Add a link
Reference in a new issue