Skip to main content

Ultra-performant Loki logger for Python applications async (FastAPI, asyncio) and sync (scripts, Django, etc.) environments.

Project description

Loki Console Logger for Python 🚀

A high-performance console logger for Python that automatically sends all print, logging, unhandled exceptions, and custom events to Grafana Loki — powered by asyncio + aiohttp.

✅ Ideal for microservices, observability pipelines, cloud apps, and scripts.

🌀 Compatible with both async (FastAPI, asyncio) and sync (scripts, Django, etc.) environments.


✨ Features

  • ⚡ Ultra-performant (fully async using aiohttp)
  • 🧠 Dynamic + static labels support (e.g., env, hostname, region)
  • 🧹 Batching + auto-flush for performance and throughput
  • 🔗 Automatically captures:
    • print(...) calls
    • logging messages
    • uncaught exceptions
  • 🔒 Optional Authorization header + multi-tenancy (X-Scope-OrgID)
  • 🧱 Zero external dependencies (only aiohttp)
  • 🧘 Safe fallback for synchronous apps (auto flush on shutdown)

📦 Installation

pip install loki-console-logger-python

🚀 Quickstart (Async Example)

from loki_console_logger_python import LokiLogger
from loki_console_logger_python.config import LokiLoggerOptions

options = LokiLoggerOptions(
    url="https://loki.elvenobservability.com/loki/api/v1/push",
    tenant_id="your-tenant-id",
    app_name="my-app",
    auth_token="your-optional-token",
    labels={"env": "production"},
    dynamic_labels={"hostname": lambda: "my-host"},
)

logger = LokiLogger(options)

# Track custom events
logger.track_event("user_signup", {"user_id": 123})

# This will be captured automatically
print("✅ Hello from Python!")

# This will also be captured
import logging
logging.info("App started")

# So will uncaught exceptions
raise RuntimeError("Simulated failure")

🧱 Example with FastAPI

from fastapi import FastAPI
from loki_console_logger_python import LokiLogger
from loki_console_logger_python.config import LokiLoggerOptions

app = FastAPI()

logger = LokiLogger(LokiLoggerOptions(
    url="https://loki.elvenobservability.com/loki/api/v1/push",
    tenant_id="elven",
    app_name="fastapi-app",
    labels={"env": "staging"},
    dynamic_labels={"hostname": lambda: "api-node-1"},
))

@app.get("/ping")
def ping():
    print("Ping received!")
    logger.track_event("ping", {"status": "ok"})
    return {"message": "pong"}

🐍 Example with Synchronous Script

from loki_console_logger_python import LokiLogger
from loki_console_logger_python.config import LokiLoggerOptions

logger = LokiLogger(LokiLoggerOptions(
    url="https://loki.elvenobservability.com/loki/api/v1/push",
    tenant_id="elven",
    app_name="data-script",
    labels={"env": "batch"},
))

print("Running ETL script...")

try:
    raise ValueError("Unexpected value")
except Exception:
    pass

logger.track_event("script_end", {"status": "completed"})

# Optional: force flush for long-running tasks
logger.flush_sync()

⚙️ Configuration Options

Option Description Default
url Full Loki Push API URL
tenant_id Value for X-Scope-OrgID (multi-tenancy)
app_name Used as a label in logs
auth_token Optional Bearer token None
batch_size Max logs before flush 10
flush_interval Seconds between auto-flush 2
labels Fixed labels (e.g., env, service) {}
dynamic_labels Runtime-evaluated labels (e.g., hostname) {}

🤝 Contributing

Contributions are very welcome — new features, bug fixes, or ideas.

Let's make observability in Python awesome together! 🛠️

  1. Fork the repository
  2. Create a new branch (git checkout -b feat/my-feature)
  3. Open a pull request

📄 License

Licensed under the MIT License.

Created with ❤️ by Leonardo Zwirtes

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

loki_console_logger_python-1.0.3.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

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

loki_console_logger_python-1.0.3-py3-none-any.whl (8.3 kB view details)

Uploaded Python 3

File details

Details for the file loki_console_logger_python-1.0.3.tar.gz.

File metadata

File hashes

Hashes for loki_console_logger_python-1.0.3.tar.gz
Algorithm Hash digest
SHA256 55d0b638d41653ff7a325203bdddf03e665a9fe070a9d26d997739559780190b
MD5 3ba869b9b7d42227e3a9f46eec1998b2
BLAKE2b-256 85dd193203ceeb66ff57b2db68b5710d0d99bdf9203b7a74630d8cd363a7b8f0

See more details on using hashes here.

File details

Details for the file loki_console_logger_python-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for loki_console_logger_python-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 f0c8cad98678536a51be0b8e9f4d4d7afc4c4ba4d0ffe521b0064a2fed16ee7c
MD5 931922c06cdb3048fdb866e25a9d3eaa
BLAKE2b-256 6f0b9b9b9719b6402a7a8a789dfefbeecfdfb0e817b80b38d0bbbfa701af9d21

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