Skip to main content

Zero-config structured logging for Python — JSON output, auto-context, function tracing

Project description

snaplog

Zero-config structured logging for Python. One import, structured JSON output everywhere.

Zero dependencies. Auto-context. Function tracing. JSON by default.

Install

pip install snaplog

Quick Start

from snaplog import get_logger

log = get_logger()

log.info("Order processed", order_id="abc", total=49.99)
# → {"ts":"2026-03-24T21:08:00.123Z","level":"info","msg":"Order processed","order_id":"abc","total":49.99,"logger":"root"}

That's it. No config files. No handlers. No formatters. Just log.

Features

  • 🚀 Zero configget_logger() and go
  • 📝 Structured JSON — every log is a JSON object
  • 🎯 Auto-context — function name, file, line number captured automatically
  • 🔍 Function tracing@log.trace decorator adds timing
  • 🏷️ Request contextwith log.context(user_id=...) adds fields to all logs
  • 👁️ Human-readable mode — for development
  • 🔌 Stdlib integration — bridges to Python's logging module
  • 🧵 Thread-safe — context propagates correctly
  • 📦 Zero dependencies — pure Python

API

Basic Logging

from snaplog import get_logger

log = get_logger()
log.debug("Verbose details", step=1)
log.info("Something happened", user_id="u1")
log.warning("Careful!", retries=3)
log.error("Failed to connect", host="db1", error_code=503)
log.critical("System down", component="database")

Auto-Context

# Automatically includes function name, file, and line
def process_order(order_id):
    log.info("Processing", order_id=order_id)
    # → {..., "func":"process_order", "file":"orders.py", "line":42}

Function Tracing

@log.trace
def fetch_user(user_id):
    return db.get(user_id)
# → {"level":"trace","msg":"enter: fetch_user","func":"fetch_user","args":{"user_id":"u1"}}
# → {"level":"trace","msg":"exit: fetch_user","func":"fetch_user","elapsed_ms":12.3,"result":"ok"}

Request Context

with log.context(request_id="r1", user_id="u42"):
    log.info("Processing request")  # includes request_id + user_id
    call_service()
    log.info("Done")  # still includes them
# Context automatically removed after `with` block

Human-Readable Output

from snaplog import get_logger, HumanFormatter

log = get_logger(formatter=HumanFormatter())
log.info("Hello", name="world")
# → 2026-03-24 21:08:00 [INFO] Hello  name=world

Min Level

log = get_logger(min_level="warning")  # debug, info suppressed

Stdlib Integration

import logging
from snaplog import SnaplogHandler

handler = SnaplogHandler()
logging.root.addHandler(handler)
logging.info("This goes through snaplog too")

Custom Output

# Write to a file
import sys
log = get_logger(output=open("app.log", "a"))

# Custom output function
def my_output(record_dict):
    requests.post("https://logs.example.com", json=record_dict)

log = get_logger(output=my_output)

Output Format

{
  "ts": "2026-03-24T21:08:00.123Z",
  "level": "info",
  "msg": "Order processed",
  "logger": "root",
  "func": "process_order",
  "file": "orders.py",
  "line": 42,
  "order_id": "abc",
  "total": 49.99
}

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

snaplog-0.3.0.tar.gz (12.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

snaplog-0.3.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

Details for the file snaplog-0.3.0.tar.gz.

File metadata

  • Download URL: snaplog-0.3.0.tar.gz
  • Upload date:
  • Size: 12.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.5

File hashes

Hashes for snaplog-0.3.0.tar.gz
Algorithm Hash digest
SHA256 add79778b4fd98464937e12540d4abff973e6b2ee7ecf453e6d3f39b1ed1b427
MD5 08132b5cdbd4fbe1db78c1ba4f752d4c
BLAKE2b-256 b76260c02643cdc864f7bfea2a3a2c4532d169bc6ce29eb1bccca39cf9d8a64d

See more details on using hashes here.

File details

Details for the file snaplog-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: snaplog-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 8.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.5

File hashes

Hashes for snaplog-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 18e5a33cd613b9e468ae84dff59707df483cbba20cf678c1769e520227c29d75
MD5 45c609dc01784a6deeafbbb29d3bc604
BLAKE2b-256 b7de9da11c874ef177c7b840b15da49db1661ac792fc3225611e89d9e4aa8557

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page