goweb/logger/logger.go

88 lines
1.6 KiB
Go

package logger
import (
"context"
"io"
"os"
"github.com/pkg/errors"
"cdr.dev/slog/sloggers/slogjson"
"cdr.dev/slog/sloggers/sloghuman"
"cdr.dev/slog"
)
type Format string
const (
FormatHuman Format = "human"
FormatJSON Format = "json"
)
var defaultLogger slog.Logger // nolint: gochecknoglobals
type Field = slog.Field
func init() { // nolint: gochecknoinits
defaultLogger = Make(FormatHuman, os.Stdout)
}
func Make(f Format, w io.Writer) slog.Logger {
var logger slog.Logger
switch f {
case FormatHuman:
logger = sloghuman.Make(w)
case FormatJSON:
logger = slogjson.Make(w)
default:
panic(errors.Errorf("unknown logger format '%s'", f))
}
return logger
}
func Debug(ctx context.Context, msg string, fields ...Field) {
slog.Helper()
defaultLogger.Debug(ctx, msg, fields...)
}
func Info(ctx context.Context, msg string, fields ...Field) {
slog.Helper()
defaultLogger.Info(ctx, msg, fields...)
}
func Warn(ctx context.Context, msg string, fields ...Field) {
slog.Helper()
defaultLogger.Warn(ctx, msg, fields...)
}
func Error(ctx context.Context, msg string, fields ...Field) {
slog.Helper()
defaultLogger.Error(ctx, msg, fields...)
}
func Critical(ctx context.Context, msg string, fields ...Field) {
slog.Helper()
defaultLogger.Critical(ctx, msg, fields...)
}
func Fatal(ctx context.Context, msg string, fields ...Field) {
slog.Helper()
defaultLogger.Fatal(ctx, msg, fields...)
}
func F(name string, value interface{}) Field {
return slog.F(name, value)
}
func SetFormat(f Format) {
defaultLogger = Make(f, os.Stdout)
}
func SetLevel(level slog.Level) {
defaultLogger = defaultLogger.Leveled(level)
}