logging

package
v0.0.0-...-638fc07 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 8, 2026 License: AGPL-3.0 Imports: 23 Imported by: 0

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 GetLogLevel

func GetLogLevel() slog.Level

GetLogLevel returns the current default log level.

func HandlerWithSpanContext

func HandlerWithSpanContext(handler slog.Handler) *spanContextLogHandler

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

type ProfileFlags map[string]string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL