Documentation
¶
Index ¶
Constants ¶
View Source
const ( // LevelTrace is a custom TRACE log level. LevelTrace = slog.Level(-8) // LevelFatal is a custom FATAL log level. LevelFatal = slog.Level(12) )
Variables ¶
View Source
var LevelNames = map[slog.Leveler]string{ LevelTrace: "TRACE", LevelFatal: "FATAL", }
LevelNames contains a list of custom log level names.
View Source
var New = sync.OnceValue(func() *slog.Logger { cfg = &Config{ Level: "info", currentLevel: slog.LevelInfo, } if err := config.Load(configEnvPrefix, cfg); err != nil { panic(fmt.Errorf("load config: %w", err)) } switch cfg.Level { case "trace": cfg.currentLevel = LevelTrace case "debug": cfg.currentLevel = slog.LevelDebug case "info": cfg.currentLevel = slog.LevelInfo case "warn": cfg.currentLevel = slog.LevelWarn case "error": cfg.currentLevel = slog.LevelError default: cfg.currentLevel = slog.LevelInfo } var handlers []slog.Handler if config.DetectContainerRuntime() != config.RuntimeNone && cfg.Format != "console" { cfg.LogFile = "" instrumentedHandler := HandlerWithSpanContext( slog.NewJSONHandler(os.Stderr, containerConsoleOptions(cfg.currentLevel)), ) handlers = append(handlers, instrumentedHandler, ) } else { handlers = append(handlers, tint.NewTextHandler(os.Stderr, consoleOptions(cfg.currentLevel, os.Stderr.Fd())), ) } if cfg.LogFile != "" { if logFH, err := openLogFile(cfg.LogFile); err != nil { fmt.Fprintln(os.Stderr, "unable to open log file: %w", err) } else { handlers = append(handlers, slog.NewTextHandler(logFH, generateFileOpts(cfg.currentLevel)), ) } } logger := slog.New(slogctx.NewHandler(slogmulti.Fanout(handlers...), &slogctx.HandlerOptions{ Prependers: []slogctx.AttrExtractor{ slogotel.ExtractTraceSpanID, slogctx.ExtractPrepended, }, Appenders: []slogctx.AttrExtractor{ slogctx.ExtractAppended, }, })) slog.SetDefault(logger) logger.Info("Logger initialised.") return logger })
New creates a new logger with the given options.
Functions ¶
func HandlerWithSpanContext ¶
HandlerWithSpanContext adds attributes from the span context [START opentelemetry_instrumentation_spancontext_logger]
func StartProfiling ¶
func StartProfiling(logger *slog.Logger, flags ProfileFlags) error
func StopProfiling ¶
func StopProfiling(logger *slog.Logger, flags ProfileFlags) error
Types ¶
type Config ¶
type Config struct {
// Level is the current default logging level.
Level string `koanf:"level" validate:"omitempty,oneof=trace debug info warn error"`
// Format overrides any auto-assigned format of the logs to the one specified.
Format string `koanf:"format" validate:"omitempty,oneof=json console"`
// LogFile is a file to which logs will be written. Any existing file will be overwritten.
LogFile string `koanf:"file" validate:"omitempty,file"`
// contains filtered or unexported fields
}
type ProfileFlags ¶
Click to show internal directories.
Click to hide internal directories.