$ show sirupsen/logrus
Logrus is a structured logging library for Go, providing a flexible and performant alternative to the standard library logger. It offers a clean architecture based on three core interfaces: Logger (configuration and output), Entry (log event with fields), Formatter (output formatting), and Hook (level-based callbacks). The library supports multiple output formats (text/logfmt with optional ANSI colors, JSON), customizable field maps, caller reporting, and a buffer pool for reduced allocation overhead. It includes built-in hooks for syslog, slog (Go's standard logging API), and a test hook for capturing log entries in tests. The package-level exported logger provides a simple global API, while custom Logger instances allow independent configuration. External dependencies are minimal, relying only on the standard library and a small set of well-maintained packages (testify for testing, sys for terminal detection). The codebase is in maintenance mode, focusing on stability, performance, and interoperability with Go's log/slog ecosystem.
The LLM identified 5 files worth highlighting for reuse:
Implements slog.Handler to forward slog records to a Logrus logger. Handles level mapping, attributes, groups, context, time, and optional caller reporting. Includes recursion guard to prevent infinite loops when bridging between slog and Logrus. Demonstrates clean adapter design and careful context propagation.
Implements logrus.Hook to forward Logrus entries to a slog logger. Converts fields to slog attributes, preserves time and caller information. Includes recursion guard to prevent cycles. Useful for gradual migration from Logrus to slog.
Provides a hook for capturing log entries in test scenarios. Thread-safe with read-write mutex. Offers LastEntry, AllEntries, and Reset methods. Can be used with global or local loggers. Demonstrates clean testing utility pattern.
Implements a buffer pool using sync.Pool to reuse bytes.Buffer instances, reducing allocation overhead in hot logging paths. Provides a simple interface for Get/Put and allows replacing the global pool. Demonstrates performance optimization pattern.
Provides registerable exit handlers that are invoked on Fatal log calls or explicit logrus.Exit. Supports both append (Register) and prepend (Defer) semantics. Handlers are run in order, with error recovery. Useful for graceful shutdown on fatal errors.