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.12.tar.gz (5.2 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.12-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

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

File metadata

File hashes

Hashes for loki_console_logger_python-1.0.12.tar.gz
Algorithm Hash digest
SHA256 729e357a2489f0e954d2a528e6d28bad6b301e8c86df800b9c1cc98f75933bf7
MD5 5f0fc3f31ee0f0d66be9fce0ae2405e2
BLAKE2b-256 0eaf16af70b65d963b62822d04be1c3202e3d98e623c064d2d60fd3a5fed4b5c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for loki_console_logger_python-1.0.12-py3-none-any.whl
Algorithm Hash digest
SHA256 478e7f771da9d49cbb23cb83cf01875f819d3d8baf7d2210b1bf02e1d600e18d
MD5 b90857c6cf3064086f2f68670e643cf4
BLAKE2b-256 b76aa1f6fe1ba0e8beda7f55af8ffa3f31a3eaa4a0290f0bffee8e0452395b0b

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