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.2.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.2.0-py3-none-any.whl (8.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: snaplog-0.2.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.2.0.tar.gz
Algorithm Hash digest
SHA256 ffdada76291a8599347f2129ce4f197db26a685762ea936f78744f7d4c434de0
MD5 7832952bdba97eeda1757d048dddfe1b
BLAKE2b-256 fc5f2039e8b816ecb6c2081f716b6ae1470cee4652ef7e4d94262b041b5b42dd

See more details on using hashes here.

File details

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

File metadata

  • Download URL: snaplog-0.2.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.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 695ac0759527622946dd328258a7effa91aa74fef9c286e716edca1c8526958e
MD5 6b261856a48374272e50014f323edd21
BLAKE2b-256 98a51f5b61f575174195aacbce39b43ac61bf84834ffc3f1ac8df10305f96ab0

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