# Loguru — Python Logging Made Stupidly Simple
> Loguru replaces Python logging boilerplate with a single import. No handlers, no formatters, no config files — just logger.info(). It adds colorized output, structured context, file rotation, and exception diagnosis out of the box.
## Install
Save as a script file and run:
# Loguru — Python Logging Made Stupidly Simple
## Quick Use
```bash
pip install loguru
```
```python
from loguru import logger
logger.info("That's it, no setup")
logger.warning("Works out of the box")
try:
1 / 0
except ZeroDivisionError:
logger.exception("Caught a bug")
```
## Introduction
Loguru replaces Python's stdlib logging — universally loved for what it does but universally hated for its boilerplate. One import gives you colorized terminal output, structured context, file rotation, retention, compression, and beautiful exception diagnosis with variable values.
With over 20,000 GitHub stars, Loguru is the most popular alternative to stdlib logging and a default choice for new Python projects.
## What Loguru Does
Loguru exposes a global logger. Call logger.info()/warning()/error() and it writes to stderr with colors. Add sinks (files, functions, coroutines) via logger.add() with optional rotation, retention, and format strings. Use logger.contextualize() or @logger.catch to capture context and wrap functions.
## Architecture Overview
```
logger.info(message, **context)
|
[Record]
time, level, message,
module, function, line,
exception, extra context
|
[Formatter] --> "[{time}] {level} {message}"
|
[Sinks]
+-- sys.stderr (colorized)
+-- file("app.log", rotation="100 MB", retention="30 days", compression="zip")
+-- custom fn / coroutine / Queue
```
## Self-Hosting & Configuration
```python
from loguru import logger
import sys
logger.remove() # remove default stderr handler
logger.add(
sys.stderr,
level="INFO",
format="{time:HH:mm:ss} {level} {message}",
)
logger.add(
"logs/app_{time}.log",
rotation="50 MB",
retention="14 days",
compression="zip",
level="DEBUG",
enqueue=True, # thread/multiprocess safe
backtrace=True,
diagnose=True,
)
with logger.contextualize(request_id="abc-123", user="alice"):
logger.info("starting request")
do_work()
@logger.catch(reraise=True)
def risky():
return [][0]
```
## Key Features
- **Zero config** — works instantly, no handler/formatter setup
- **Colorized output** — readable in dev terminals
- **File rotation** — size, time, or custom function triggers
- **Retention & compression** — auto-delete old logs, zip/tar archives
- **Async safe** — `enqueue=True` for multiprocessing and asyncio
- **Beautiful tracebacks** — show variable values at every frame
- **Structured context** — `logger.contextualize()` propagates fields
- **Exception catcher** — `@logger.catch` decorator wraps functions
## Comparison with Similar Tools
| Feature | Loguru | stdlib logging | structlog | Eliot | Logbook |
|---|---|---|---|---|---|
| Setup required | None | Extensive | Moderate | Moderate | Moderate |
| Colorized | Yes | No | Via renderer | No | Yes |
| Structured | Yes | Manual | Yes (focus) | Yes | Partial |
| Rotation | Built-in | Via handler | Via sink | External | Built-in |
| Traceback w/ values | Yes | No | No | Partial | No |
| Best For | Any Python app | Library code | Structured JSON | Causal logs | Legacy |
## FAQ
**Q: Can I use Loguru with stdlib logging?**
A: Yes. Add an InterceptHandler that forwards logging records to Loguru, and all library logs flow through Loguru sinks.
**Q: Is Loguru production ready?**
A: Yes. Large companies use it in production. For libraries intended for others, prefer stdlib logging so users can configure it themselves.
**Q: How do I emit JSON logs?**
A: `logger.add(sys.stdout, serialize=True)` produces one JSON record per line — perfect for Loki, Datadog, or CloudWatch.
**Q: Is the global logger a problem for testing?**
A: Use `caplog` from pytest-loguru, or remove and re-add sinks in fixtures. Tests remain clean.
## Sources
- GitHub: https://github.com/Delgan/loguru
- Docs: https://loguru.readthedocs.io
- Author: Delgan
- License: MIT
---
Source: https://tokrepo.com/en/workflows/6922366e-37b5-11f1-9bc6-00163e2b0d79
Author: Script Depot