logfx

package
v0.6.28 Latest Latest
Warning

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

Go to latest
Published: May 22, 2025 License: Apache-2.0 Imports: 8 Imported by: 0

README

ajan/logfx

Overview

The logfx package is a configurable logging solution leverages the log/slog of the standard library for structured logging. It includes pretty-printing options and a fx module for the ajan/di package. The package supports OpenTelemetry-compatible severity levels and provides extensive test coverage to ensure reliability and correctness.

The documentation below provides an overview of the package, its types, functions, and usage examples. For more detailed information, refer to the source code and tests.

Configuration

Configuration struct for the logger:

type Config struct {
	Level      string `conf:"level"      default:"INFO"`
	PrettyMode bool   `conf:"pretty"     default:"true"`
	AddSource  bool   `conf:"add_source" default:"false"`
}

The supported log levels (in ascending order of severity) are:

  • TRACE - Detailed information for debugging
  • DEBUG - Debugging information
  • INFO - General operational information
  • WARN - Warning messages for potentially harmful situations
  • ERROR - Error messages for serious problems
  • FATAL - Critical errors causing program termination
  • PANIC - Critical errors causing panic

These levels are compatible with OpenTelemetry Severity levels, allowing seamless integration with observability platforms.

API

NewLogger function

Creates a new logfx.Logger object based on the provided configuration.

// func NewLogger(w io.Writer, config *Config) (*logfx.Logger, error)

logger, err := logfx.NewLogger(os.Stdout, config)
NewLoggerAsDefault function

Creates a new logfx.Logger object based on the provided configuration and makes it default slog instance.

// func NewLoggerAsDefault(w io.Writer, config *Config) (*logfx.Logger, error)

logger, err := logfx.NewLoggerAsDefault(os.Stdout, config)
Colored outputs

Logs ANSI-colored strings.

// func Colored(color Color, message string) string

// available colors:
//	ColorReset        ColorDimGray
//	ColorRed          ColorLightRed
//	ColorGreen        ColorLightGreen
//	ColorYellow       ColorLightYellow
//	ColorBlue         ColorLightBlue
//	ColorMagenta      ColorLightMagenta
//	ColorCyan         ColorLightCyan
//	ColorGray         ColorLightGray

logger.Fatal(
  logfx.Colored(logfx.ColorLightYellow, "Hello, World!"),
  slog.String("first_name", "Eser"),
  slog.String("last_name", "Ozvataf"),
)

Documentation

Index

Constants

View Source
const (
	LevelTrace slog.Level = slog.Level(-8)
	LevelDebug slog.Level = slog.LevelDebug
	LevelInfo  slog.Level = slog.LevelInfo
	LevelWarn  slog.Level = slog.LevelWarn
	LevelError slog.Level = slog.LevelError
	LevelFatal slog.Level = slog.Level(12)
	LevelPanic slog.Level = slog.Level(16)
)

OtelLevel - 9 = Level.

Variables

This section is empty.

Functions

func Colored

func Colored(color Color, message string) string

func LevelEncoder added in v0.6.14

func LevelEncoder(l slog.Level) string

func LevelEncoderColored added in v0.6.14

func LevelEncoderColored(l slog.Level) string

func ParseLevel added in v0.6.14

func ParseLevel(s string, errorOnEmpty bool) (*slog.Level, error)

func ReplacerGenerator

func ReplacerGenerator(prettyMode bool) func([]string, slog.Attr) slog.Attr

func TraceLines

func TraceLines(frames StackTrace) []string

Types

type Color

type Color string
const (
	ColorReset        Color = "\033[0m"
	ColorRed          Color = "\033[31m"
	ColorGreen        Color = "\033[32m"
	ColorYellow       Color = "\033[33m"
	ColorBlue         Color = "\033[34m"
	ColorMagenta      Color = "\033[35m"
	ColorCyan         Color = "\033[36m"
	ColorGray         Color = "\033[37m"
	ColorDimGray      Color = "\033[90m"
	ColorLightRed     Color = "\033[91m"
	ColorLightGreen   Color = "\033[92m"
	ColorLightYellow  Color = "\033[93m"
	ColorLightBlue    Color = "\033[94m"
	ColorLightMagenta Color = "\033[95m"
	ColorLightCyan    Color = "\033[96m"
	ColorLightGray    Color = "\033[97m"
)

type Config

type Config struct {
	Level      string `conf:"level"      default:"INFO"`
	PrettyMode bool   `conf:"pretty"     default:"true"`
	AddSource  bool   `conf:"add_source" default:"false"`
}

type Handler

type Handler struct {
	InnerHandler slog.Handler

	InnerWriter io.Writer
	InnerConfig *Config
}

func NewHandler

func NewHandler(w io.Writer, config *Config) (*Handler, error)

func (*Handler) Enabled

func (h *Handler) Enabled(ctx context.Context, level slog.Level) bool

func (*Handler) Handle

func (h *Handler) Handle(ctx context.Context, rec slog.Record) error

func (*Handler) WithAttrs

func (h *Handler) WithAttrs(attrs []slog.Attr) slog.Handler

func (*Handler) WithGroup

func (h *Handler) WithGroup(name string) slog.Handler

type Logger added in v0.6.15

type Logger struct {
	*slog.Logger
}

func NewLogger

func NewLogger(w io.Writer, config *Config) (*Logger, error)

func NewLoggerAsDefault

func NewLoggerAsDefault(w io.Writer, config *Config) (*Logger, error)

func NewLoggerFromSlog added in v0.6.16

func NewLoggerFromSlog(slog *slog.Logger) *Logger

func (*Logger) Fatal added in v0.6.15

func (l *Logger) Fatal(msg string, args ...any)

Fatal logs at LevelFatal.

func (*Logger) FatalContext added in v0.6.15

func (l *Logger) FatalContext(ctx context.Context, msg string, args ...any)

FatalContext logs at LevelFatal with the given context.

func (*Logger) Panic added in v0.6.15

func (l *Logger) Panic(msg string, args ...any)

Panic logs at LevelPanic.

func (*Logger) PanicContext added in v0.6.15

func (l *Logger) PanicContext(ctx context.Context, msg string, args ...any)

PanicContext logs at LevelPanic with the given context.

func (*Logger) Trace added in v0.6.15

func (l *Logger) Trace(msg string, args ...any)

Trace logs at LevelTrace.

func (*Logger) TraceContext added in v0.6.15

func (l *Logger) TraceContext(ctx context.Context, msg string, args ...any)

TraceContext logs at LevelTrace with the given context.

type StackTrace

type StackTrace = []uintptr // []runtime.Frame

type StackTracer

type StackTracer interface {
	StackTrace() StackTrace
}

Jump to

Keyboard shortcuts

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