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.5.tar.gz (4.9 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.5-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for loki_console_logger_python-1.0.5.tar.gz
Algorithm Hash digest
SHA256 9c046db4f11b131fb60db17b4f4681ab93de8ef3c15ad695979fdb503b166070
MD5 f2229c63a2200fc7fabbf3a87043601d
BLAKE2b-256 491c239cc08d7411eabffcd7cf57af272cfe84aca2513dd3745691cb10e412ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for loki_console_logger_python-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 c2e924c2908c43acd1454249a5a8aa604bde7ff1fa2b3ca6421927e9f9f7bb91
MD5 a785e6a57ee8dc3fac8b11491d8d55ab
BLAKE2b-256 f71bd47289517a850286a37404ee802b8478e7d1d35b485fa50f9bd069aa272f

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