Logrus

Structured, pluggable logging for Go with a stdlib-compatible API and level-based hooks.

Library
Go
vv1.10.2
25,762 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
86 /100 Excellent
Development Activity 96
Maintenance 72
Community 76
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
79 /100 Good
Architecture 85
Code Quality 92
Innovation 72
Learning Curve 65

Logrus is a structured logging library for Go that is a drop-in replacement for the standard library’s log package. It lets you attach structured key-value fields to every log line instead of formatting messages by hand, and ships with both a colorized text formatter for local development and a JSON formatter for log aggregation tools like Logstash and Splunk.

The project is explicitly in maintenance mode: its API is stable and widely adopted across the Go ecosystem, but new feature development has stopped in favor of security fixes, bug fixes, and interoperability with Go’s newer structured logging package, log/slog. It remains one of the most widely used logging libraries in Go, with a large hook ecosystem for routing logs to syslog, exception trackers, and other destinations.

What You Get

  • A stdlib-compatible Logger and set of package-level logging functions (Info, Warn, Error, Fatal, Panic, Trace, Debug)
  • Structured fields via WithField/WithFields, letting you attach key-value context instead of formatting strings manually
  • Built-in TextFormatter (colorized for TTYs) and JSONFormatter for machine-parseable log output
  • A Hook interface for firing custom logic per log level, plus built-in hooks for syslog and a Writer for redirecting stdlib log output
  • Seven log levels (Trace through Panic) with per-logger level filtering and IsLevelEnabled checks

Common Use Cases

  • Structured application logging - Backend services attach request IDs, user IDs, and other context fields to every log line for easier querying in log aggregation tools
  • Drop-in replacement for the stdlib logger - Teams migrate existing log.Print-based code to Logrus by swapping the import, gaining structured fields without rewriting call sites
  • Log shipping to external systems - Applications use built-in or custom hooks to forward Error/Fatal/Panic-level entries to exception trackers, syslog, or metrics systems
  • JSON logs for log aggregation - Services running behind Logstash or Splunk switch to JSONFormatter so their log output is directly machine-parseable

Under The Hood

Architecture

Logrus centers on two types: Logger, which owns the output writer, formatter, hooks, and level; and Entry, a snapshot of a single log event created via WithField(s) or WithContext and carried through Data map fields (logrus.go, logger.go, entry.go). Package-level functions in exported.go delegate to a singleton std *Logger, giving a convenient global-logger facade over the same instance-based API. Hooks are stored in a LevelHooks map keyed by level (hooks.go) and fired synchronously from entry.log, while output formatting is abstracted behind a single-method Formatter interface (formatter.go) implemented by TextFormatter and JSONFormatter. A sync.Pool recycles Entry objects and a BufferPool interface (buffer_pool.go) recycles byte buffers during formatting, and a mutexWrap (logger.go) serializes writes to Out. The design is a straightforward layered facade — Logger to Entry to Formatter/Hooks — with no dependency injection framework needed given the narrow domain.

Tech Stack

The module targets Go 1.23 and keeps its dependency surface minimal: golang.org/x/sys for terminal/TTY detection across platforms, stretchr/testify for assertions in tests, and a small indirect go.yaml.in/yaml/v3 dependency. There’s no web framework, ORM, or database layer since Logrus is a logging library, not an application framework. CI cross-compiles the package for every GOOS/GOARCH pair returned by go tool dist list, runs the test suite with the race detector across three Go versions (stable, oldstable, 1.23.x) on Linux, Windows, and macOS, and additionally verifies compatibility with TinyGo for constrained targets — an unusually broad build matrix for a library of this size.

Code Quality

Test coverage is extensive and close in size to the implementation itself — entry_test.go (657 lines) versus entry.go (567), logrus_test.go at 848 lines, and dedicated benchmark files (entry_bench_test.go, logger_bench_test.go, formatter_bench_test.go) alongside the unit tests. CI runs go test -race on every push and PR, and .golangci.yml enables a long list of strict linters — gosec, errorlint, testifylint, unparam, noctx, nilerr, exhaustive, and more — beyond the default set. Error handling favors explicit returned errors (ParseLevel, Hook.Fire) over panics except at the documented Fatal/Panic log levels, which intentionally call os.Exit/panic() as part of their contract. Naming and doc comments consistently use Go’s modern doc-linking syntax ([WithFields], [Entry.Data]), and example_*_test.go files double as runnable, verified documentation.

API Design The public API is deliberately small and mirrors the standard library logger, which is the main reason for its wide adoption — teams can alias log "github.com/sirupsen/logrus" and get structured fields with almost no code changes. WithField/WithFields return a chainable *Entry so context can be built up incrementally before a terminal call like .Info() or .Error() fires the write, and package-level functions (logrus.Info, logrus.WithFields, …) proxy to the same methods on a default instance so single-binary programs never need to construct a Logger explicitly. The tradeoff for that broad compatibility is that the library itself acknowledges, in its own README, that it is now in maintenance mode and that newer libraries (Zerolog, Zap, Apex) offer a more modern structured-logging design; Logrus optimizes for API stability and drop-in compatibility over new capabilities.

Used by 36 apps in this directory

TypeScript
64%
MIT

Jitsu

Data Engineering

5,105

Open-source, fully-scriptable data ingestion engine that streams events from web, apps, and APIs to any data warehouse in real time.

View details
89
Repo Health
79
Technical
66
Dependency
Built with
TypeScript 64%
Go 34%
Updated 2 weeks ago
TypeScript
44%
Other

Magic

AI Agents · Automation · Low Code Platforms

5,048

Magic is an enterprise-grade open-source AI agent platform combining a generalist AI agent, workflow engine, IM, and collaborative office system for running an AI-powered digital workforce.

View details
69
Repo Health
79
Technical
65
Dependency
Built with
TypeScript 44%
PHP 32%
Updated 2 months ago
TypeScript
52%
Other

Mattermost

Collaboration · Devops · Team Chat

39,306

Open core, self-hosted team collaboration with chat, AI agents, voice calling, and deep DevOps integrations — all under your control.

View details
96
Repo Health
87
Technical
65
Dependency
Built with
TypeScript 52%
Go 40%
Updated 2 weeks ago
Go
82%
GPL 3.0

Navidrome

File Storage · Music Audio

24,068

Run your own personal Spotify — stream your entire music collection from any device, anywhere, forever.

View details
91
Repo Health
81
Technical
69
Dependency
Built with
Go 82%
JavaScript 15%
Updated 2 weeks ago
Go
95%
Other

NetBird

Security

29,840

Replace your VPN with a zero-trust WireGuard overlay network that auto-connects devices, enforces SSO and posture checks, and deploys in under 5 minutes.

View details
92
Repo Health
82
Technical
66
Dependency
Built with
Go 95%
Updated 1 weeks ago
Go
64%
MIT

Obot

AI Agents · Mcp

1,099

An open-source MCP platform for organizations — host MCP servers, run MCP registries, monitor usage, and build agents and chatbots on top of the Model Context Protocol from one self-hosted deployment.

View details
88
Repo Health
70
Technical
70
Dependency
Built with
Go 64%
Svelte 23%
TypeScript 13%
Updated 1 weeks ago
Go
99%
Apache 2.0

Okteto

Developer Tools · Devops

3,554

Develop applications directly inside your Kubernetes cluster with real-time file sync and instant hot-reload — no more docker build/redeploy cycles.

View details
90
Repo Health
79
Technical
69
Dependency
Built with
Go 99%
Updated 2 weeks ago
Python
65%
Other

Onyx

AI Agents · AI Assistants · Knowledge Management

32,380

Self-hostable AI platform with agentic RAG, 50+ connectors, deep research, code execution, and support for every major LLM provider.

View details
92
Repo Health
83
Technical
68
Dependency
Built with
Python 65%
TypeScript 25%
Updated 1 weeks ago
Go
51%
Apache 2.0

opencloud

File Storage

6,120

Open source file management and collaboration platform that keeps your data under your control, no database required.

View details
86
Repo Health
80
Technical
68
Dependency
Built with
Go 51%
Gherkin 34%
PHP 11%
Updated 2 weeks ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers