Skip to main content

Taggin logging with dynamic tags, structured storage, and CLI search.

Project description

Taggin

Welcome

Taggin is a tiny layer on top of the Python stdlib logger that treats attribute access as dynamic tags (log.TRAIN.BATCH("...")). Tags can be filtered via glob patterns, assigned custom log levels, rate limited, and every log is mirrored into a structured store that can be searched or exported.

Installation

Install via pip (or pixi/uv) with:

pip install taggin

The CLI depends on arrow and cyclopts (included), colorful console output uses rich, and saving/reading Parquet requires pandas plus a backend such as pyarrow or fastparquet.

Usage

Quick start

from datetime import datetime
from taggin import (
    setup_logger,
    get_log_storage,
    set_visible_tags,
    set_tag_style,
)

log = setup_logger(enable_color=True)  # enables Rich-powered colors where supported
set_visible_tags(["TRAIN.*", "io.net"])
set_tag_style("TRAIN.START", color="green", emoji="🚂")

log.info("Booting")
log.TRAIN.START("epoch=%s", 1)
log.io.net("connected to redis")

storage = get_log_storage()
storage.save_text("logs/run.txt")                # new file
storage.save_text("logs/run.txt", append=True)   # append to existing file
storage.save_parquet("logs/run.parquet")         # requires pandas + pyarrow

recent = storage.search_by_date(start=datetime.utcnow().replace(hour=0, minute=0))
by_tag = storage.search_by_tag("TRAIN.*")
approx = storage.search_fuzzy("redis connection failed", threshold=0.5)

When enable_color=True, tags render in color (and can add emoji via set_tag_style). Disable the flag to fall back to plain text.

All structured entries store the timestamp, level, logger name, tag, and message so they remain queryable even if the original message contains its own time or date. This makes ad-hoc debugging easy whether you prefer grepping the text artifact or using a DataFrame/Parquet workflow.

CLI search utility

A small cyclopts-powered CLI is available for exploring saved logs without writing Python. Assuming you saved either a structured text log or Parquet file:

taggin by-tag logs/run.txt "TRAIN.*"
taggin by-date logs/run.parquet --start "2025-01-01" --end "2025-01-05"
taggin fuzzy logs/run.txt "redis timeout" --threshold 0.4 --limit 5
taggin tags logs/run.txt                    # list all known tags
taggin by-tag logs/run.txt "TRAIN.*" --json-output   # machine-friendly

Each command prints matching entries in the same concise [TAG] message style, or JSON (when --json-output is provided) for downstream scripting.

Tests

Run the small pytest suite (which also exercises the Parquet writer when pandas is available) with:

pytest

Documentation

This repo ships MkDocs docs (Home, Examples, API Reference). Preview locally:

mkdocs serve

or build static files via mkdocs build. The content lives under docs/.

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

taggin-0.1.1.tar.gz (39.5 kB view details)

Uploaded Source

Built Distribution

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

taggin-0.1.1-py3-none-any.whl (12.1 kB view details)

Uploaded Python 3

File details

Details for the file taggin-0.1.1.tar.gz.

File metadata

  • Download URL: taggin-0.1.1.tar.gz
  • Upload date:
  • Size: 39.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for taggin-0.1.1.tar.gz
Algorithm Hash digest
SHA256 549618cfffea9047be5598abb83abd7dd5b33237b1dc1c9e4bdd5a80ff2215bd
MD5 2d0175cb62745af3e9d5a841804b7997
BLAKE2b-256 0b44ce36bea4f2329c95b9e2556f7dac13e7bd7ce708969df4d5101864e46929

See more details on using hashes here.

File details

Details for the file taggin-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: taggin-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 12.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.0

File hashes

Hashes for taggin-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 ffe149edd6ecf41629fc277fb64b0e6901c206913dcf943e9fa319e9ac84e994
MD5 8de02232d8231e5e040d59915dbbbde5
BLAKE2b-256 0a3ecf42f8f4e0da4019e1873ab0afbad640cd0915d8e94fffb0b4bccd716152

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